2009-11-26 8 views
6

Ich habe die Quelle für Launchy heruntergeladen und versuche, es in Visual Studio 2005 zu bauen. Das Launchy-Projekt wird mit VC7 erstellt, so musste ich die Projektdateien auf VC8 aktualisieren und dieser Prozess schien gut zu gehen . Allerdings verwendet Launchy auch die Boost 1.33.1 libs und was ich gebaut habe, sind die Boost 1.41.0 libs (Requisiten für Boost, um die neueren Bibliotheken viel einfacher zu bauen), also habe ich auch das Projekt aktualisiert, um auf mein neues zu zeigen Boost libs installieren. Jetzt habe ich den folgenden Linkfehler:Boost lib link Fehler Visual C++

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib' 

ich einen Blick in der Boost lib hatte und das nächste Spiel, das ich finden konnte, ist ...

libboost_regex-vc80-mt-gd-1_41.lib 

Beachten Sie die fehlende ‚s‘. Ich verstehe nicht, was der Unterschied in libs ist und ob Visual Studio nach dem Falschen sucht oder mein Boost-Build-Prozess die richtigen Bibliotheken nicht erstellt hat. Kann mir jemand in die richtige Richtung zeigen?

Als ein Experiment, habe ich eine Kopie der Regex-Bibliothek, die ich habe und machte es in das, was der Linker sucht. Das gibt mir eine lange Liste von Linker-Fehler über Symbole bereits in MSVCRTD.lib definiert werden, wie die folgenden:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in libcmtd.lib(typinfo.obj) 

Ich werde versuchen, die Boost 1.33.1 Libs zu bauen und meine Launchy Projektdatei an diesem Punkt stattdessen. Aber ich würde immer noch gerne wissen, was mit meinen Boost 1.41.0-Bibliotheken nicht stimmt.

bearbeiten: Ich fand einen Verweis in the Boost docs auf das, was die 's' Libs sind:

Use this library when linking statically to the C++ standard library and compiler runtime support libraries.

So sieht es aus wie die Libs 's' sind die richtigen. Jetzt muss ich nur herausfinden, wie man sie baut.

Lösung: Ich konnte die fehlenden Boost-Bibliotheken mit der folgenden Befehlszeile erstellen.

bjam --build-type=complete msvc stage 

Ich lief, dass nach bereits boostrap.bat im dir läuft, wo Schub lebt.

+0

Wenn Sie nicht mit dem Aufbau von ihnen zu tun haben wollen, können Sie sie hier bekommen: http://boost.teeks99.com – teeks99

Antwort

10

Der Unterschied ist clearly described in Boost docs - "mt-sgd" bedeutet "Debug, statisch verknüpfte Laufzeitbibliotheken, Multithread, mit Debug-Symbolen". "mt-gd" ist das gleiche, verwendet jedoch dynamisch verknüpfte Laufzeitbibliotheken (d. h. msvcrtd.lib anstelle von libcmtd.lib).

Entweder Projekteinstellungen ändern, um dynamische CRT-Verknüpfung zu verwenden (d. H./MDd anstelle von/MTd), oder Boost mithilfe statischer Verknüpfungen erstellen - diese werden nicht ordnungsgemäß funktionieren.

3

Welchen Befehl haben Sie verwendet, um Boost aufzubauen? Versuchen Sie, Build-Type = Complete anzugeben. Normalerweise sollte es die s libs auch bauen.

+0

Ich werde das versuchen, danke. Ich denke, ich habe es ohne Angabe von Build-Typ gebaut. – Parappa

+0

Es funktioniert! Danke noch einmal. – Parappa

+0

Es funktioniert nicht für mich. Die S-Bibliotheken sind nicht gebaut. boost 1.54 – Max

Verwandte Themen