Sto usando boost nel mio progetto. Ho scaricato binari pre-compilati da qui http://boost.teeks99.com/errore di collegamento: libboost ambiguo * .lib vs boost * .lib
Quando si collega ricevo tale errore:
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
Perché spinta contiene due lib
con nome in modo simile, qual è la differenza tra loro?
- libboost_thread-vc110-mt-1_52.lib
- boost_thread-vc110-mt-1_52.lib
Come risolvere l'errore di collegamento?
upd Ho compilato boost. Ho aggiunto la directory boost_1_53_0\stage\lib
al linker. Questa directory contiene in realtà 3 "copie" di "ogni" file, ad esempio:
- boost_atomic-vc110-mt-1_53.dll
- boost_atomic-vc110-mt-1_53.lib
- libboost_atomic-vc110 -mt-1_53.lib
Quindi è chiaro ciò che afferma il compilatore. In qualche modo non può capire quale versione del file lib usare. È probabile che sia collegato a collegamenti statici/dinamici, ma non riesco ancora a trovare la soluzione. Sono sicuro che i miei problemi sono piuttosto comuni, quindi spero che qualcuno possa suggerirmi cosa fare.
Ho cercato di eliminare tutte le "libboost *" file dalla cartella, ma poi ho ricevere tale errore: Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'
Ho cercato di eliminare tutti i file "spinta * lib" dalla cartella ma poi ricevo tale errore: Error 15 error LNK1104: cannot open file 'boost_thread-vc110-mt-1_53.lib'
Poi ho copiato boost_thread-vc110-mt-1_53.lib
indietro e ricevo un sacco di errori del genere:
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)
Quindi, quando non c'è il compilatore boost_thread-vc110-mt-1_53.lib
che manca, quando c'è il compilatore boost_thread-vc110-mt-1_53.lib
afferma che "la funzione è già definita". Probaly, in qualche modo, io uso il collegamento dinamico e statico allo stesso tempo o qualcosa del genere?
UPD2 ho commentata #define BOOST_ALL_DYN_LINK
come suggerito here e ora il codice compila! sto indagando se tutto il resto va bene. tuttavia non ho capito perché dovrei decommentare #define BOOST_ALL_DYN_LINK
quindi i commenti sono ben accetti.
Si tenta di collegare entrambe le versioni statiche e dinamiche di Boost.Thread. 'boost_thread' è la libreria di importazione per dll,' libboost_thread' è una libreria statica. –
perché VS collega entrambi, come risolvere questo problema? – javapowered
Di solito VS non lo fa, quindi la domanda è cosa c'è di sbagliato nelle tue impostazioni. Hai definito "BOOST_ALL_DYN_LINK"? Ti colleghi con CRT in modo statico o dinamico (/ MT o/MD)? Forzi il collegamento di alcune delle librerie sopra (Linker -> Input -> dipendenze Aditional o '# pragma comment (lib, ...)')? –