Boost zum Laufen bringen??



  • ok, so jetzt nochmal Schritt für Schritt:

    hab ich nochmal ganz von vorne angefangen...

    - boost_1_43_0 runtergeladen
    - entpackt (in ~/boost/) - diesmal war auch das shellscript dabei...
    - durchgelaufen ohne (erkennbare) Fehlermeldungen

    Jetzt hab ich auf dem Desktop die Datei threads.cpp (da hab ich jetzt mal das Testprogramm von der boost-Website http://www.boost.org/doc/libs/1_43_0/more/getting_started/unix-variants.html (Punkt 6) rein - damit auch nix schief gehen kann)

    Aufruf in der bash:

    ~/$ cd Desktop
    ~/Desktop/$ g++ -I ~/boost/boost_1_43_0/ threads.cpp ???
    

    Was kommt jetzt genau bei "???" hin. Ich muss ja noch (in dem Fall) regex angeben. Ich hab jetzt schon so viel ausprobiert und nichts geht.

    (Installation von boost ist in ~/boost/boost_1_43_0/
    und mittels find hab ich noch /usr/includes/boost gefunden - was da auch immer der Unterschied sein mag)

    Bitte verweist mich nicht wieder auf die boost-Website. Ich studiere die schon seit 3 Tagen und werd nicht schlau draus! 😞

    Vielen Dank 😉



  • Wie das geht steht aber auch unter Punkt 6.
    Ich habe boost testweise in ~/boost installiert, bei mir sieht das demnach so aus:

    g++ -I ~/boost/include regex_example.cpp -o regex_example ~/boost/lib/libboost_regex.a
    


  • </Exit> schrieb:

    ...

    Aufruf in der bash:

    ~/$ cd Desktop
    ~/Desktop/$ g++ -I ~/boost/boost_1_43_0/ threads.cpp ???
    

    Was kommt jetzt genau bei "???" hin. Ich muss ja noch (in dem Fall) regex angeben. Ich hab jetzt schon so viel ausprobiert und nichts geht.

    ...

    Bitte verweist mich nicht wieder auf die boost-Website. Ich studiere die schon seit 3 Tagen und werd nicht schlau draus! 😞

    Vielen Dank 😉

    Du solltest dich vielleicht mal mit der g++-Dokumentation befassen. Es fehlt ein -L<Pfad zu den Bibliotheken> und ein -lboost_thread, wobei

    <Pfad zu den Bibliotheken> eben der Pfad ist, in dem sich die libboost_thread.so oder libboost_thread.a befindet.

    Lars



  • Das komische ist erstmal, dass sich bei mir nicht alle .a Dateien in einem Ordner befinden. Ich hab libboost_regex.a mal gesucht und der Pfad sieht so aus:

    .../bin.v2/libs/regex/build/gcc-4.4.1/release/link-static/threading-multi/libboost_regex.a

    Boom! Es funktioniert damit zwar, aber threads funktionieren immer noch nicht 😕

    Ich hab den Aufruf mit
    /bin.v2/libs/thread/build/gcc-4.4.1/release/link-static/threading-multi/libboost_thread.a
    gemacht und bekomme undefined reference to pthread_...

    Und das mit dem -L... geht ja schlecht, wenn ich keinen Ordner mit allen libs habe oder sucht der auch rekursiv?



  • </Exit> schrieb:

    Ich hab den Aufruf mit
    /bin.v2/libs/thread/build/gcc-4.4.1/release/link-static/threading-multi/libboost_thread.a
    gemacht und bekomme undefined reference to pthread_...

    Da dürfte dann noch -pthread fehlen.

    </Exit> schrieb:

    Und das mit dem -L... geht ja schlecht, wenn ich keinen Ordner mit allen libs habe oder sucht der auch rekursiv?

    Genau wie -I kann natürlich auch -L mehrfach angegeben werden. Rekursive Suche gibt es nicht.

    Wie schon gesagt, du solltest dich mit der g++-Dokumentation befassen.

    Lars



  • aaah, DANKESCHÖN an euch!!! 😉 Jetzt läuft's.

    Warum muss ich eigentlich pthread einbinden, wenn ich nur boost:thread verwende?
    Ok, das ist die Basis auf die aufgebaut wird, aber darum müsste sich doch eigentlich die Library kümmern und nicht der Anwender der Lib oder nicht?



  • </Exit> schrieb:

    Das komische ist erstmal, dass sich bei mir nicht alle .a Dateien in einem Ordner befinden. Ich hab libboost_regex.a mal gesucht und der Pfad sieht so aus:

    .../bin.v2/libs/regex/build/gcc-4.4.1/release/link-static/threading-multi/libboost_regex.a

    Dann ist die Installation mittels bjam nicht komplett durch gelaufen. Bzw. man muß bjam am besten noch den Parameter install mit geben. Denn dann wird zum Schluß jede der Libs in einen Ordner rüber kopiert.

    Also, normalerweise ist das alles in 5 Min. erledigt, vom runter laden von Boost, bjam und BBv2, setzen der zwei Umgebungsvariablen und absetzen des bjam-Kommandos.

    Weiß nicht was ihr da immer am rum fummeln seid. 😕



  • </Exit> schrieb:

    aaah, DANKESCHÖN an euch!!! 😉 Jetzt läuft's.

    Warum muss ich eigentlich pthread einbinden, wenn ich nur boost:thread verwende?

    Du bindest nicht nur die libpthread ein. Der Compiler wird insgesamt in den Threadmodus geschaltet. Jedes cpp, des in einem Programm mit Threads läuft, sollte mit der Option -pthread übersetzt werden, auch wenn innerhalb des Moduls keine Threadfunktionen benutzt werden.

    </Exit> schrieb:

    Ok, das ist die Basis auf die aufgebaut wird, aber darum müsste sich doch eigentlich die Library kümmern und nicht der Anwender der Lib oder nicht?

    Nein, auf einem Unixartigen Betriebssystem ist das so, war schon immer so und wird auch noch lange so bleiben 😉

    Wie schon mehrfach gesagt, du solltest dich mit der Dokumentation des g++ beschäftigen.

    Lars



  • Danke, hab jetzt nochmal bjam mit --install ausgeführt und jetzt ist der Ordner auch da... (.../stage/lib)

    Ich könnte allerdings nochmal schnell Hilfe gebrauchen (ich hab die Doku vom gcc/g++ jetzt auch mal angesehn ;))

    So sieht mein Aufruf aus:

    g++ -I ~/boost/boost_1_43_0 threads.cpp -o threads -pthread -L~/boost/boost_1_43_0/stage/lib/ -lboost_thread
    

    Wenn ich den letzten Teil durch ~/boost/boost_1_43_0/stage/lib/libboost_thread.a ersetze, funktioniert es wunderbar.
    So wie es dasteht, bekomm ich nur "cannot find -lboost_thread"

    Also: ich sag ihm wo er nach zusätzlichen Header suchen soll (-I), Ausgabe (-o), zusätzlich pthread und mache ihm den Pfad zur Lib bekannt (-L).
    Jetzt sollte der Aufruf der Lib mit -l"name ohne lib davor und .a/.so danach" gehen... (da ich dynamisch linke ist die Reihenfolge auch egal)

    Warum geht's nicht?



  • Das ~ wird hinter dem -L vermutlich von der Shell nicht ersetzt. Probier es mal mit dem vollständigen Pfad oder $HOME.

    Lars



  • Super danke. Genau das war's... Mit dem ganzen Pfad geht's. Komisch nur, dass bei -I das Ganze kein Problem ist.



  • </Exit> schrieb:

    Super danke. Genau das war's... Mit dem ganzen Pfad geht's. Komisch nur, dass bei -I das Ganze kein Problem ist.

    Beim -I hast du ein ' ' zwischen dem Schalter und dem Pfad, bei -L nicht. Daher wird das '~' beim -L nicht ersetzt. Wenn du dort ein ' ' einfügst, und der Compiler das immer noch akzeptiert, geht's auch da.

    Lars


Anmelden zum Antworten