2011-01-06 2 views
9

Ich habe lief bjam.exe --build-dir="C:\build-boost" --build-type=minimal msvc stageVerfüge ich über statische oder dynamische Boost-Bibliotheken?

und jetzt habe ich Bibliotheken LIB mit diesen Header, zum Beispiel

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

Ich glaube, diese statischen Bibliotheken für Debug sein sollte und die Version freigeben. Wenn ich den Compiler mit Multi-threaded Debug (/MTd) starte gibt es einen Fehler LNK1104: cannot open file 'libboost_serialization-vc100-mt-sgd-1_45.lib' Es sucht nach einem mit -sgd

wo gehe ich falsch?

+1

Vielleicht können Sie versuchen, mit "--build-type = complete" zu bauen, da dies alle unterstützten Varianten der Bibliotheken erstellt.Siehe Abschnitt "5.3.4 Invoke bjam" in http://www.boost.org/doc /libs/1_42_0/more/getting_started/windows.html – yasouser

Antwort

4

Sie haben die dynamischen Versionen. Die statischen werden durch das "s" im Namen begrenzt. Stellen Sie sicher, dass Sie link=static auf der bjam-Befehlszeile angegeben haben. Wenn nicht, müssen Sie neu erstellen, um die statischen Versionen zu erstellen.

+0

soll es mir am Ende irgendwelche '.dlls' geben? Ich habe nur die '.libs' im Stage-Ordner. – snoz

+0

@snoz: Sie suchen dann im falschen Ordner. Auf Windows-Boxen werden die Bibliotheken als Build-Artefakte behandelt, die dann in den Ausgabeordner kopiert werden, wenn die Kompilierung jeder Bibliothek abgeschlossen ist. Sie müssen herausfinden, wo sich das Verzeichnis mit den DLLs und den Bibliotheken befindet. –

2

Siehe Boost getting started windows Abschnitt 6.3 Benennung und section 6.1 on Unix naming

Bei statischen Bibliotheken sollte es zum Beispiel in einem s sein -sgd so haben Sie dynamische Bibliotheken

+0

Ich denke nicht, dass es "egd" sein sollte, es sollte "sgd" oder einfach "s" sein. –

2

hier ist, wie ich es brechen

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 

So Compiler für statische Multithread sucht debug library (mt-sgd), während Sie mit/MTd ausgeführt haben (Erstellt eine Multithread-ausführbare Debugdatei mit LIBCMTD.lib). Ich denke standardmäßig muss es nach statischer Bibliothek suchen. Wenn Sie eine dynamische Bibliothek wollen, legen Sie diese Zeilen im Code oder ein Makro

#define BOOST_ALL_DYN_LINK 
20

Etwas definieren, die Art ist verwirrend ist, gibt es zwei ‚statische‘ Optionen für den Aufbau Schub mit MSVC.

B2.exe nimmt die Option link=static, die Boost angibt, dass Sie IT statisch verknüpfen möchten. Wenn Sie Ihr VC-Projekt mit/MT oder/MTd kompilieren, müssen Sie auch die Option runtime-link=static verwenden, um Boost mitzuteilen, dass Sie statisch mit den VC-Laufzeitbibliotheken verknüpfen werden.

Es ist der zweite runtime-link=static, der die -s in den .lib-Namen steckt.

Mein Kommandozeile für den Bau Schub war

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

Ich habe eine Menge Probleme damit, aber mit einer Reihe von verschiedenen Abhängigkeiten, nicht nur Boost. Ich glaube du hast es gerade für mich gemacht! (3 Jahre später). –

Verwandte Themen