linking-Fehler: mehrdeutig libboost*.lib vs boost*.lib

Ich bin mit boost in meinem Projekt. Ich habe heruntergeladen vorkompilierten binaries von hier aus http://boost.teeks99.com/

Beim verknüpfen erhalte ich diesen Fehler:

Error 18 error LNK2005: "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ) already defined in boost_thread-vc110-mt-1_52.lib(boost_thread-vc110-mt-1_52.dll) C:\Oleg\projects\MBClient\FastNativeAdapter\libboost_thread-vc110-mt-1_52.lib(thread.obj) FastNativeAdapter

Warum boost enthält zwei lib mit so ähnlichen Namen, was ist der Unterschied zwischen Ihnen?

  • libboost_thread-vc110-mt-1_52.lib
  • boost_thread-vc110-mt-1_52.lib

Wie zu beheben verknüpfen Fehler?

upd das ich zusammengestellt habe-boost selbst. Ich habe boost_1_53_0\stage\lib Verzeichnis linker. Dieses Verzeichnis enthält eigentlich 3 "Kopien" von "jeder" - Datei, zum Beispiel:

  • boost_atomic-vc110-mt-1_53.dll
  • boost_atomic-vc110-mt-1_53.lib
  • libboost_atomic-vc110-mt-1_53.lib

Es ist also klar, was compiler, Behauptungen über die. Irgendwie kann es nicht verstehen, welche version der lib-Datei zu verwenden. Es ist wahrscheinlich verbunden mit statische/dynamische Verknüpfung, aber ich kann immer noch nicht die Lösung finden. Ich bin mir sicher, dass meine Probleme ist sehr verbreitet, so dass ich hoffe, jemand kann mir empfehlen, was zu tun ist.

Ich habe versucht, alle löschen "libboost*" - Dateien aus dem Ordner, aber dann bekomme ich diesen Fehler:
Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'

Ich habe versucht, löschen Sie alle "boost*lib" - Dateien aus dem Ordner, aber dann bekomme ich diesen Fehler:
Error 15 error LNK1104: cannot open file 'boost_thread-vc110-mt-1_53.lib'

Dann kopierte ich boost_thread-vc110-mt-1_53.lib zurück und ich bekomme eine Menge von Fehlern wie:

Error 16 error LNK2005: "public: virtual __cdecl boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UEAA@XZ) already defined in boost_thread-vc110-mt-1_53.lib(boost_thread-vc110-mt-1_53.dll)

So, wenn es keine boost_thread-vc110-mt-1_53.lib compiler behauptet, dass es fehlt, wenn es boost_thread-vc110-mt-1_53.lib compiler behauptet, dass "die Funktion ist bereits definiert". Wahrscheinlich irgendwie ich tun, verwenden Sie dynamische und statische Verbindung zur gleichen Zeit oder etwas wie das?

upd2 habe ich auskommentiert #define BOOST_ALL_DYN_LINK wie vorgeschlagen hier und jetzt code kompiliert! ich bin untersuchen, wenn alles andere in Ordnung ist. aber ich Verstand nicht, warum sollte ich kommentieren #define BOOST_ALL_DYN_LINK so Kommentare sind willkommen.

  • Sie versuchen, den link sowohl statische als auch dynamische Versionen der Boost.Thread. boost_thread ist die import library für die dll libboost_thread ist die statische Bibliothek.
  • warum VS Verknüpfung sowohl, wie dieses Problem zu beheben?
  • In der Regel VS dies nicht tut, die Frage ist also, was ist falsch mit den Einstellungen. Sie haben BOOST_ALL_DYN_LINK definiert? Machst du mit CRT statisch oder dynamisch (/MT oder /MD)? Erzwingen Sie die Verknüpfung einige der oben genannten libs (Linker-->Input-->Zusätzliche Abhängigkeiten oder # pragma comment(lib,...))?
InformationsquelleAutor javapowered | 2013-04-17
Schreibe einen Kommentar