Problem bei der Installation und Kompilierung von Boost-Thread Bibliotheken



  • -lboostthread

    bedeutet, dass die Datei folgendermaßen heißen muss:

    libboostthread.so ( .a )

    müsste vermutlich im /usr/lib/
    liegen.

    Wenn ich das richtig in Erinnerung habe.
    Also gucken wie die library heißt. Das "lib" vorn weglassen und die endung auch und dann den Rest des Namens dem Linker mitteilen. Korrigier mich jemand, wenn ich falsch liege 🙂


  • Mod

    Wenn die Datei libboost_thread.so heißt, dann musst du mit -lboost_thread linken. Außerdem gibt man bei -L gewöhlich nur den Pfad an, nicht den Dateinamen. Mag sein, dass das aber trotzdem funktioniert, wenn man eine Datei angibt. Alles zusammen:

    c++ -I /usr/local/boost_1_40_0 thread.cpp -o thread -lboost_thread -L/usr/local/boost_1_40_0/stage/lib/
    


  • ... gib mal nach '-L' nicht ne Bibliothek sondern den Übergeordneten Ordner an ...

    Gruß Simon



  • wenn die Datei libboost_thread heißt solltest du auch den Namen angeben und nicht einen, der nur so ähnlich ist. (ich bin mir nicht ganz sicher ob mit oder ohne Endung, sollte aber die Doku zum gcc Linker hergeben). Drauf achten dass es dann zwei l sind, das eine für den Linker ("-l" heißt die Option), und eines für den Lib-Namen. Bei der "-L"-Option wird nur das Verzeichnis angegeben, wo der Linker nach geeigneten Bibliotheken suchen soll - also ohne die libboost_thread.a am Ende:

    c++ -I/usr/local/boost_1_40_0 thread.cpp -o thread -llibboost_thread -L/usr/local/boost_1_40_0/stage/lib/
    

    Wie gesagt, ggf noch das .a an libbost_thread anfügen.



  • also ich hab mal bei mir geschaut.
    Da heißt die Datei:

    /usr/lib/libboost_thread-gcc41-mt.so

    d.h. linken würdest du dann mit -lboost_thread-gcc41-mt

    Ich hoffe das kommt soweit hin ( ich nutze immer eclipse 😃 ).



  • Danke, das Linken hat jetzt funktioniert.

    Allerdings machen die Bibliotheken beim ausführen des Programmes immer noch Ärger. hier die Fehlermeldung:

    ./thread: error while loading shared libraries: libboost_thread.so.1.40.0: cannot open shared object file: No such file or directory


  • Mod

    Allerdings machen die Bibliotheken beim ausführen des Programmes immer noch Ärger. hier die Fehlermeldung:

    ./thread: error while loading shared libraries: libboost_thread.so.1.40.0: cannot open shared object file: No such file or directory

    Füg' der Umgebungsvariable LD_LIBRARY_PATH den Pfad zu den Boost Bibliotheken hinzu oder linke statisch.

    edit: Und mal ernsthaft: Beschäftige dich mal mit dem Thema Linken von Bibliotheken, sonst wirst du hier jedes mal Nachfragen müssen.



  • Das mit dem Statisch Linken funktioniert leider nicht, ich bekomme wieder die lange Fehlermeldung wie zu Anfang.

    Das setzen der Umgebungsvariablen, welches ich mit folgendem Befehl gemacht habe

    LD_LIBRARY_PATH=/usr/local/boost_1_40_0/stage/lib/

    hat nichts an der Fehlermeldung geändert.

    Vielleicht hat noch jemand einen Vorschlag. Ich lese mich währendem immer mehr in die Thematik ein, hab aber noch keine Lösung gefunden.



  • Hat sich erledigt. Bin jetzt woanders auf eine Lösung gestoßen.


  • Mod

    timobachtel schrieb:

    Das mit dem Statisch Linken funktioniert leider nicht, ich bekomme wieder die lange Fehlermeldung wie zu Anfang.

    Dann sind die boost Bibliotheken nicht zum statischen linken geeignet oder sie werden nicht gefunden. Bibliotheken zum statischen Linken enden mit .a (wie archive) und welche zum dynamischen Linken mit .so (wie shared object).

    Das setzen der Umgebungsvariablen, welches ich mit folgendem Befehl gemacht habe

    LD_LIBRARY_PATH=/usr/local/boost_1_40_0/stage/lib/

    hat nichts an der Fehlermeldung geändert.

    Wie man Umgebungsvariablen setzt, hängt von deiner shell ab. Wenn du bash verwendest und danach nicht zu einer anderen Konsole wechselst, dann ist das so richtig.

    Vielleicht hat noch jemand einen Vorschlag. Ich lese mich währendem immer mehr in die Thematik ein, hab aber noch keine Lösung gefunden.

    Es gibt auch die Möglichkeit, den Pfad zu dynamischen Bibliotheken in ein Programm einzukompilieren, mittels LD_RUN_PATH. Damit du hier nicht jedes Detail nachfragen musst:
    http://osr507doc.sco.com/en/tools/ccs_linkedit_dynamic_dirsearch.html


Anmelden zum Antworten