boost::thread t(thread)



  • Hallo ich bin recht neu in C++ und muss leider schon recht hart einsteigen.
    Wenn ich nun dieses Threadbeispiel teste bekomme ich folgenden Fehler.
    Kann mir jemand sagen woran das liegt?

    /*
    #define BOOST_THREAD_USE_LIB
    #include <boost/thread.hpp>
    #include <iostream>
    void wait(int seconds)
    {
      std::cout <<" ich warte" <<std::endl;
    }
    void thread()
    {
      for (int i = 0; i < 5; ++i)
      {
        wait(1);
        std::cout << i << std::endl;
      }
    }
    int main()
    {
      boost::thread t(thread);
      t.join();
    }
    
    C:\Users\Viktor Gottfried\workspace\startThread1\Debug/../src/startThread.cpp:32: undefined reference to `boost::thread::join()'
    C:\Users\Viktor Gottfried\workspace\startThread1\Debug/../src/startThread.cpp:31: undefined reference to `boost::thread::~thread()'
    C:\Users\Viktor Gottfried\workspace\startThread1\Debug/../src/startThread.cpp:31: undefined reference to `boost::thread::~thread()'
    src\startThread.o: In function `thread<void (*)()>':
    c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../include/boost/thread/detail/thread.hpp:204: undefined reference to `boost::thread::start_thread()'
    collect2: ld returned 1 exit status
    

  • Mod

    Du musst die Boost-Threadbibliothek dazu linken. Aus den Fehlermeldungen nehme ich mal an, dass du GCC benutzt, da machst du dann auf der Kommandozeile etwas ähnliches wie:

    g++ -Wall -Wextra beispiel.cpp -lboost_thread -o beispiel
    

    Das -lbibliothek bindet eine Bibliothek ein. Achte auf die Reihenfolge. Dateien, die von anderen Dateien genutzt werden, müssen hinter diesen stehen. Hier nutzt dein Beispiel Funktionen aus der libboost_thread, also muss dein Beispielcode weiter vorne stehen.

    Wenn du eine IDE benutzt, dann übernimmt die das auch bestimmt alles für dich, du musst ihr nur beibringen, welche Bibliotheken sie dazu linken soll. Wie das genau geht, kommt auf die IDE an.



  • Genau ich nutze GCC und als IDE benutze ich Eclipse.
    Aber dort kann ich unter den Buildsettings
    Propoerties-->C/C++ Build-->Settings-->Tool Settings-->MinGW C++ Linker
    keine Angaben machen.

    Oder muss ich das über Libraries machen? Librarie-search Path oder die Librarie direkt angeben?

    C:\boost-libs\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\threading-multi

    funzt nicht!

    Thx und MfG

    EDIT:
    Habe nun zu den Libraries folgendes hinzugefügt:
    boost_thread-mgw45-mt-1_48
    pthread

    Dann erstellt Eclipse mir eine Exe und Kompiliert alles, aber wenn ich das Prgramm ausführen möchte kommmt:

    Nothing to build for startThread1

    Error starting process.
    Cannot run program "C:\Users\Viktor Gottfried\workspace\startThread1\Debug\startThread1.exe": Launching failed
    Cannot run program "C:\Users\Viktor Gottfried\workspace\startThread1\Debug\startThread1.exe": Launching failed
    Cannot run program "C:\Users\Viktor Gottfried\workspace\startThread1\Debug\startThread1.exe": Launching failed
    

Anmelden zum Antworten