Boost einbinden
-
Hallo allerseits,
ich habe ein Problem beim einbinden der Boost-Bibliotheken. Ich habe es runtergeladen und installiert. (gemäß Tutorial http://www.boost.org/more/getting_started/windows.html)Nun habe ich ein Testprogramm, wo ich bei Linker > Additional Library Directories
den Pfad zur Bibliothek hinzugefügt. (Pfad D:\boost\boost_1_34_1\lib). Zum testen habe ich dann mal#include <boost/lambda/lambda.hpp>
eingebunden. Visual Studio 2008 meckert aber nur rum, dass es den Pfad nicht findet. Was amche ich falsch?
-
Du mußt natürlich auch den Pfad für die Includes angeben. UNd die LIB-Dateien braucht man bei msvc nicht direkt angeben, da wissen die Boost-Header welche LIB-Dateien sie linken sollen. (Pfad zu den LIB-Dateien ist trotzdem nötig)
-
Ah ja, so klappts. Vielen Dank!
EDIT:
Jetzt habe ich folgendes versucht
#include <boost/thread/thread.hpp>Da fliegt mir jetzt aber folgender Fehler um die Ohren:
1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc80-mt-gd-1_34_1.lib'
Kann mir dazu jemand etwas sagen?
-
(Pfad zu den LIB-Dateien ist trotzdem nötig)
Du musst auch den Pfad zu den Lib-Dateien angeben, sonst kann der Compiler diese nicht finden und dementsprechend auch nicht öffnen.
-
Ah ja, ich hatte libs und nicht lib geschrieben, mein Fehler. Danke!
EDIT: Sorry, ich muss nochmal nerven. Ich habe mir ein Beispielprogramm besorgt, um mir die Funktionsweise von boost-Threads zu veranschaulichen.
Folgender Code:
#include "stdafx.h" #include <boost/thread/thread.hpp> #include <boost/thread/xtime.hpp> #include <iostream> struct thread_alarm { thread_alarm(int secs) : m_secs(secs) { } void operator()() { boost::xtime xt; boost::xtime_get(&xt, boost::TIME_UTC); xt.sec += m_secs; boost::thread::sleep(xt); std::cout << "alarm sounded..." << std::endl; } int m_secs; }; int main(int argc, char* argv[]) { int secs = 5; std::cout << "setting alarm for 5 seconds..." << std::endl; thread_alarm alarm(secs); boost::thread thrd(alarm); thrd.join(); }Es kompiliert, aber folgende Linkerfehler:
Linking...
1>libboost_thread-vc80-mt-gd-1_34_1.lib(thread.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ) referenced in function "public: __thiscall std::_List_nod<class boost::thread *,class std::allocator<class boost::thread *> >::~_List_nod<class boost::thread *,class std::allocator<class boost::thread *> >(void)" (??1?allocator@PAVthread@boost@@@std@@@std@@QAE@XZ)
1>libboost_thread-vc80-mt-gd-1_34_1.lib(tss_hooks.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)
1>libboost_thread-vc80-mt-gd-1_34_1.lib(thread.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base::_Container_base(void)" (__imp_??0_Container_base@std@@QAE@XZ) referenced in function "protected: __thiscall std::_List_nod<class boost::thread *,class std::allocator<class boost::thread *> >::_List_nod<class boost::thread *,class std::allocator<class boost::thread *> >(class std::allocator<class boost::thread *>)" (??0?allocator@PAVthread@boost@@@std@@@std@@IAE@V?$allocator@PAVthread@boost@@@1@@Z)
1>libboost_thread-vc80-mt-gd-1_34_1.lib(tss_hooks.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base::_Container_base(void)" (__imp_??0_Container_base@std@@QAE@XZ)
1>C:\Dokumente und Einstellungen\Martin\Eigene Dateien\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 2 unresolved externals
-
Was spricht gegen ein
#include <boost/thread.hpp>das die ganzen Unterheader direkt einbindet?
Inhalt von boost/thread.hpp:
//... #include <boost/thread/thread.hpp> #include <boost/thread/condition.hpp> #include <boost/thread/exceptions.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/once.hpp> #include <boost/thread/recursive_mutex.hpp> #include <boost/thread/tss.hpp> #include <boost/thread/xtime.hpp> //...