boost :: thread build error (kann lib && nicht aufgelöstes externes nicht verknüpfen)

7

Ich versuche, ein einfaches Tutorial von Boost :: Thread (ver 1.4-3) in VS 2008 zu folgen:

%Vor%

Während der Kompilierung wird dieser Fehler erzeugt:

%Vor%

was ich auflösen muss, indem ich #define BOOST_ALL_NO_LIB hinzufüge. Jedoch gibt es mir einen anderen Fehler:

%Vor%

Kann jemand das Problem lösen?

Danke.

    
csa 02.07.2010, 08:43
quelle

2 Antworten

21

Ich denke, eine tiefere Antwort als "Lies das Handbuch lesen" könnte hilfreich sein!

Diese Art von Link-Fehler ist ein Hinweis darauf, dass Sie versuchen, eine inkompatible Boost-Bibliothek zu verknüpfen.

Ich habe das bekommen, als ich fälschlicherweise eine 32-Bit-Boost-Thread-Bibliothek erstellt habe, als ich dachte, ich würde eine 64-Bit-Bibliothek erstellen. Es hat eine Weile gedauert, bis du herausgefunden hast, dass du einen subtilen Fehler gemacht hast, wenn du --address-model=64 als bjam-Kommandozeilenparameter sagst. Der Parameter address-model darf NICHT das Präfix -- haben. Leider informiert bjam Sie nicht, wenn es die falsche Syntax sieht.

Sie können das Programm dumpbin verwenden, um die von Ihrer Bibliothek bereitgestellten Symbole zu überprüfen, während die Symbole, die der Linker sagt, nicht aufgelöst sind. Ich habe festgestellt, dass die Bibliothekssymbole mit __thiscall und nicht mit __cdecl versehen wurden. Dies ist ein schreiender guter Hinweis auf das Architektur-Missverhältnis. Der Microsoft-Compiler verwendet das __thiscall Funktionsaufrufprotokoll für 32-Bit-Builds, aber es verwendet __cdecl für 64-Bit-Builds. Ja, die Microsoft-Dokumentation ist hier ein wenig schwach !!

Die beste Möglichkeit, eine .lib- oder .dll-Datei zu überprüfen, um zu sehen, wie sie erstellt wurde, ist die Verwendung des Programms dumpbin. Hier ist ein Beispiel:

%Vor%

Sie müssen den Namen der Bibliothek natürlich anpassen, damit er zu dem passt, was Sie verlinken. Dadurch wird Ihnen eindeutig angezeigt, ob die .lib- oder .dll-Datei für x86 (32-Bit) oder x64 (64-Bit) vorgesehen ist.

    
TangoBravoMike 21.01.2011 20:28
quelle
0

Sie müssen die Boost-Thread-Bibliothek erstellen und Visual Studio mitteilen, wo sich die Bibliothek befindet. All dies ist in der Dokumentation "Erste Schritte" dokumentiert (zB Erste Schritte unter Windows ) . Lesen Sie speziell Abschnitt 5 und dann Abschnitt 6 .

PS. Sie müssen sicherstellen, dass Ihre Build-Konfiguration mit dem übereinstimmt, für das VS festgelegt wurde. Das Erste Schritte erklärt die verschiedenen Build-Optionen.

    
GrafikRobot 02.07.2010 16:04
quelle