2011-01-06 2 views
9

J'ai couru bjam.exe --build-dir="C:\build-boost" --build-type=minimal msvc stageEst-ce que j'ai des librairies dynamiques ou statiques?

et maintenant j'ai bibliothèques .lib avec ces en-têtes, par exemple

libboost_serialization-vc100-mt 
libboost_serialization-vc100-mt-1_45 
libboost_serialization-vc100-mt-gd 
libboost_serialization-vc100-mt-gd-1_45 

Je crois que ceux-ci devraient être des bibliothèques statiques pour le débogage et publier la version. Lorsque je cours le compilateur avec Multi-threaded Debug (/MTd) il donne une erreur LNK1104: cannot open file 'libboost_serialization-vc100-mt-sgd-1_45.lib' Il cherche un avec -sgd

où je vais mal?

+1

Peut-être que vous pouvez essayer de construire en utilisant "--build-type = complete" car cela va construire toutes les variantes supportées par les bibliothèques.Voir la section "5.3.4 Invoke bjam" sur http://www.boost.org/doc /libs/1_42_0/more/getting_started/windows.html – yasouser

Répondre

4

Vous avez les versions dynamiques. Les statiques sont délimités en ayant le "s" dans le nom. Assurez-vous que vous avez spécifié link=static sur la ligne de commande bjam. Sinon, vous devrez reconstruire pour faire les versions statiques.

+0

est-ce que cela suppose de me donner des '.dlls' à la fin? Je n'ai que le fichier '.libs' dans le dossier stage. – snoz

+0

@snoz: Vous cherchez dans le mauvais dossier alors. Sur les boîtes Windows, les bibliothèques sont traitées comme des artefacts de construction, qui sont ensuite copiés dans le dossier de sortie lorsque la compilation de chaque bibliothèque est terminée. Vous devrez trouver où se trouvent le répertoire contenant les dll et les libs. –

2

Voir la section 6.3 Boost getting started windows dénomination et section 6.1 on Unix naming

Pour les bibliothèques statiques devrait y avoir un s là par exemple -sgd si vous avez des bibliothèques dynamiques

+0

Je ne pense pas que ça devrait être "egd", ça devrait être "sgd" ou juste "s". –

2

Voici comment je le décomposer

libboost_serialization-VC100-mt-sgd-1_45.lib

lib- if boost library starts with lib then its a static library , shared library do not start with lib prefix. Also static library will have a '-s' in the name. 

mt- multi-threaded , obtained by specifying threading=multi when you ran bjam or b2.This is the default threading. 

g- use debug libraries for building the code 
d- build a debug version of your code 

Ainsi, votre compilateur cherche multi-thread statique bibliothèque de débogage (mt-sgd) que vous avez exécutée avec/MTd (crée un fichier exécutable multithread de débogage à l'aide de LIBCMTD.lib). Je suppose que par défaut, il doit chercher la bibliothèque statique. Si vous voulez une bibliothèque dynamique, insérez ces lignes dans votre code ou définir une macro

#define BOOST_ALL_DYN_LINK 
20

Quelque chose qui est une sorte de confusion est il y a deux options « statiques » pour la construction de coup de pouce avec MSVC. B2.exe prend l'option link=static qui indique boost que vous voulez lier IT statique. Si vous compilez votre projet VC avec/MT ou/MTd, vous devrez également utiliser l'option runtime-link=static pour indiquer à boost que vous lierez statiquement aux bibliothèques d'exécution VC.

C'est le second runtime-link=static qui place le -s dans le nom .lib.

Ma ligne de commande pour stimuler la construction était

b2.exe --toolset=msvc variant=release link=static threading=multi runtime-link=static stage 
+0

J'ai beaucoup de problèmes avec cela, mais avec un tas de dépendances différentes, pas seulement boost. Je pense que vous venez de faire le clic pour moi! (3 années plus tard). –

Questions connexes