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?_Listnod@PAVthread@boost@@V?\_List_nod@PAVthread@boost@@V?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?_Listnod@PAVthread@boost@@V?\_List_nod@PAVthread@boost@@V?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>
    //...
    

Anmelden zum Antworten