Używam boost w moim projekcie. Pobrałem skompilowane pliki binarne stąd http://boost.teeks99.com/błąd łączenia: niejednoznaczne libboost * .lib kontra boost * .lib
Podczas łączenia otrzymuję taki błąd:
Error 18 error LNK2005: "public: void __cdecl boost::thread::join(void)" ([email protected]@[email protected]@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
Dlaczego Boost zawiera dwa lib
z tak podobnej nazwie, jaka jest różnica między nimi?
- libboost_thread-vc110-mt-1_52.lib
- boost_thread-vc110-mt-1_52.lib
Jak naprawić łączące błąd?
upd Sam skompilowałem doładowanie. Dodałem katalog boost_1_53_0\stage\lib
do linkera. Ten katalog faktycznie zawiera 3 "kopie" w "każdym" pliku, na przykład:
- boost_atomic-vc110-mt-1_53.dll
- boost_atomic-vc110-mt-1_53.lib
- libboost_atomic-vc110 -mt-1_53.lib
Więc jest jasne, o co twierdzi kompilator. Jakoś nie może zrozumieć, której wersji pliku lib użyć. Jest to prawdopodobnie związane z łączeniem statycznym/dynamicznym, ale nadal nie mogę znaleźć rozwiązania. Jestem pewien, że moje problemy są dość powszechne, więc mam nadzieję, że ktoś może zasugerować mi, co mam robić.
Próbowałem usunąć wszystkie „libboost *” pliki z folderu, ale potem otrzymać taki błąd: Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'
Starałem się usunąć wszystkie „boost * lib” pliki z folderu, ale potem odbierać taki błąd: Error 15 error LNK1104: cannot open file 'boost_thread-vc110-mt-1_53.lib'
Potem kopiowane boost_thread-vc110-mt-1_53.lib
z powrotem i dostaję mnóstwo błędów tak:
Error 16 error LNK2005: "public: virtual __cdecl boost::detail::thread_data_base::~thread_data_base(void)" ([email protected]@[email protected]@[email protected]) already defined in boost_thread-vc110-mt-1_53.lib(boost_thread-vc110-mt-1_53.dll)
Tak więc, gdy nie ma kompilatora boost_thread-vc110-mt-1_53.lib
, który twierdzi, że go brakuje, kompilator twierdzi, że "funkcja jest już zdefiniowana". Czy w jakiś sposób używam dinamicznego i statycznego linkowania w tym samym czasie lub czegoś w tym stylu?
upd2 Odrzuciłem komentarz #define BOOST_ALL_DYN_LINK
zgodnie z sugestią here i teraz kompiluje kod! badam, czy wszystko inne jest w porządku. jednak nie rozumiem, dlaczego powinienem odkomentować #define BOOST_ALL_DYN_LINK
, więc komentarze są mile widziane.
Podjęto próbę połączenia zarówno statycznej, jak i dynamicznej wersji Boost.Thread. 'boost_thread' jest biblioteką importu dla biblioteki dll,' libboost_thread' jest biblioteką statyczną. –
dlaczego VS łącząc oba, jak rozwiązać ten problem? – javapowered
Zazwyczaj VS tego nie robi, więc pytanie brzmi, co jest nie tak z twoimi ustawieniami. Czy masz zdefiniowany "BOOST_ALL_DYN_LINK"? Czy łączysz się z CRT statycznie lub dynamicznie (/ MT lub/MD)? Czy wymuszasz linkowanie niektórych z powyższych bibliotek (Linker -> Input -> Aditional dependencies lub '# pragma comment (lib, ...)')? –