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 dlllibboost_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,...)
)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Edit: Ursprünglichen Aussage entfernt, da die Bearbeitung der post änderte sich die situation.
Basierend auf http://www.boost.org/doc/libs/1_53_0/more/getting_started/unix-variants.html#library-naming (wie von Igor R.):
libboost_thread-vc110-mt-1_52.lib ist eine statische lib (keine Notwendigkeit für die DLL)
boost_thread-vc110-mt-1_52.lib ist die import-lib zur DLL
Müssen Sie nur verwenden Sie eine der diese.
lib
natürlich habe ich die dll auchIch denke, zunächst einmal müssen Sie korrigieren Ihre Frage. Meinst du (ich vermute, Sie wissen schon den Unterschied zwischen
DLL
undLIB
)oder
Sowieso, es scheint, das Problem ist, du bist mixing-statisch(
libboost_thread-vc110-mt-1_52.lib
) und shared (boost_thread-vc110-mt-1_52.lib
) boost-Bibliotheken. Aber ohne die Arbeitsumgebung und die Plattform details, die ich nicht Zweck einer exakten Lösung. Wenn Sie die Arbeit inVisual Studio
,dann können Sie gehen, umright click on project file
>properties
>linker
>input
>ignore specific library
und fügen Sielibboost_thread-vc110-mt-1_52.lib
es und versuchen.Fragen myquestion mich.
müssen die Auskommentierung #define BOOST_ALL_DYN_LINK (siehe Beschreibung)
Andere Idee/Lösung, um zu versuchen, wenn Sie auf den
error LNK1104: cannot open file 'libboost_date_time-*.lib'
Fehler:In unserem Projekt, wir sind die
boost/date_time.hpp
- Datei. Wir definieren die KonstanteBOOST_ALL_NO_LIB
statt BOOST_ALL_DYN_LINK in unserem Projekt-Einstellungen zu erzählen, fördert das nicht automatisch auswählen, welche Bibliotheken zu verlinken gegen.Finden Sie die Boost - Dokumentation für weitere Informationen über diese option.
So könnte man hinzufügen
BOOST_ALL_NO_LIB
im Projekt-Eigenschaften -> C/C++ -> Präprozessor -> Präprozessor-Definitionen und überprüfen Sie, ob diese linker-Fehler geht Weg.