2016-09-29 3 views
-2

Ich habe ein Problem, das ich nicht loswerden kann. Ich habe ein kleines privates Projekt, wo ich Asio für die Netzwerkkommunikation und Boost Threads verwenden möchte. Ich möchte Boost nicht auf meinem Rechner installieren, also habe ich den Quellcode in mein Projekt integriert. Dafür habe ich eine globale Header einschließlich Boost-Thread und Asio, wie folgt aus:Linker Fehler mit Boost Sourcecode

#include "boost/asio.hpp" 
#include "boost/thread.hpp" 

So kann ich statische Libs ohne Probleme bauen kann, aber gemeinsam genutzte Bibliotheken oder ausführbare Linker Fehler verursachen:

error LNK2019: unresolved external symbol "private: bool __cdecl boost::thread::join_noexcept(void)" ([email protected]@[email protected]@AEAA_NXZ) referenced in function "public: void __cdecl boost::thread::join(void)" ([email protected]@[email protected]@QEAAXXZ) 
error LNK2019: unresolved external symbol "class boost::thread::id __cdecl boost::this_thread::get_id(void)" ([email protected][email protected]@@[email protected]@[email protected]) referenced in function "public: void __cdecl boost::thread::join(void)" ([email protected]@[email protected]@QEAAXXZ) 
error LNK2019: unresolved external symbol "public: class boost::thread::id __cdecl boost::thread::get_id(void)const " ([email protected]@[email protected]@[email protected]@XZ) referenced in function "public: void __cdecl boost::thread::join(void)" ([email protected]@[email protected]@QEAAXXZ) 
error LNK2019: unresolved external symbol "private: bool __cdecl boost::thread::do_try_join_until_noexcept(unsigned __int64,bool &)" ([email protected]@[email protected]@[email protected]) referenced in function "private: bool __cdecl boost::thread::do_try_join_until(unsigned __int64)" ([email protected]@[email protected]@[email protected]) 
error LNK2019: unresolved external symbol "public: void __cdecl boost::thread::interrupt(void)" ([email protected]@[email protected]@QEAAXXZ) referenced in function "public: __cdecl NetworkAdapter::~NetworkAdapter(void)" ([email protected]@[email protected]) 
error LNK2019: unresolved external symbol "public: bool __cdecl boost::thread::joinable(void)const " ([email protected]@[email protected]@QEBA_NXZ) referenced in function "public: __cdecl NetworkAdapter::~NetworkAdapter(void)" ([email protected]@[email protected]) 

Die aktuelle Konfiguration für bisher im Projekt mit boost als Quelle:

#define BOOST_SYSTEM_SOURCE 
#define BOOST_DATE_TIME_NO_LIB 
#define BOOST_REGEX_NO_LIB 
#define BOOST_THREAD_DYN_LINK 
#define BOOST_THREAD_DYN_DLL 
#define BOOST_THREAD_BUILD_DLL 
#define BOOST_CHRONO_HEADER_ONLY 
#define BOOST_DATE_TIME_NO_LIB 

Ohne diese Konfiguration Linker für * LIB-Dateien für Thread fragt, Chrono und so weiter. Laut Boost Homepage Thread und Asio sind HeaderOnly, also warum sucht der Linker nach Lib, fehlende Symbole - anstatt Header zu verwenden? Was mache ich falsch?

jeden Hinweis Appreciating :-)

Mit freundlichen Grüßen, Dan

+0

Was ist Ihre Linker-Befehlszeile? –

+0

Wo haben Sie die Aussage gefunden, dass der Boost-Thread eine Nur-Header-Bibliothek ist? http://StackOverflow.com/A/2174542/2101267 –

+0

Ebenso ist Boost Asio nur Header, aber hängt in einigen Fällen von einigen Bibliotheken ab, die nicht: http://www.boost.org/doc/libs/1_51_0/ doc/html/boost_asio/using.html # boost_asio.using.dependencies –

Antwort

1

Vom boost threading website

Boost.Thread hängt von einigen nicht-Header-only-Bibliotheken.

Boost.System: Diese Abhängigkeit ist obligatorisch und Sie müssen mit der Bibliothek verknüpfen. Boost.Chrono: Diese Abhängigkeit ist optional (siehe unten wie zu konfigurieren) und Sie müssen mit der Bibliothek verknüpfen, wenn Sie einige der zeitbezogenen Schnittstellen verwenden. Boost.DateTime: Diese Abhängigkeit ist obligatorisch, aber auch wenn Boost.DateTime eine nicht Header-Only-Bibliothek ist Boost.Thread verwendet nur Teile, die nur Header sind, , so dass im Prinzip sollten Sie nicht mit der Bibliothek verknüpfen müssen.

Sie irren sich also - es ist nicht nur Header.