g++ erklären das da ne lib ist



  • Wie erklär ich dem gcc/g++ das in directory ../lib/ ne library ist die er DYNAMISCH linken soll (Linux-System)
    Mein aktueller Code klappt nicht so 😞

    g++ -o Tester main.cpp -lModelv0.1.so
    

    danke :=)

    PS: wenn man es zufällig weiß wär n beispiel für ne makefile auch super


  • Mod

    g++ -o Tester main.cpp -lModelv0.1 -L../lib
    

    Dies hätte man auch überaus einfach mit der Anleitung oder Google rausfinden können.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • schön und gut, dann habe ich eine ausführbare datei die aber beim ausführen sagt, das es die gelinkte bibliothek nicht finden kann!
    Ich bin nicht dumm, und google ist kein Fremdwort, aber da wird nur davon gereded das man die lib nach /usr/lib oder /usr/local/lib pasten muss bzw eine etc/lib.conf datei verändern soll.
    Da ich aber keins davon machen will (mein Programm soll mit str+c str+v auf einem anderen Linux/Ubuntu System übertragbar sein), muss ich die libs eben mit einem Ordner rumschleppen. Nur wie erkläre ich sowohl compiler als auch post-compilierten Programm das es DIESE bibliothek benutzen soll und zwar in folgendem ordner ../lib (o.ä.)


  • Mod

    edit: Oder in Kurzform: Dann kannst du den Pfad nochmals mit -R angeben.



  • LD_RUN_PATH scheint die richtige spur zu sein, aber da steht das geht nur mit absoluten Pfadangaben, das ist eher ungünstig bei dem Lösungschema was ich anstrebe. Geht meine idee denn überhaupt mit dynamischen bibliotheken?


  • Mod

    Jud4s schrieb:

    LD_RUN_PATH scheint die richtige spur zu sein, aber da steht das geht nur mit absoluten Pfadangaben, das ist eher ungünstig bei dem Lösungschema was ich anstrebe. Geht meine idee denn überhaupt mit dynamischen bibliotheken?

    Ich habe oben nochmal editiert, weil ich kein Fan von globalen Einstellungen bin. Das sollte dir eher weiterhelfen. Je nach Linker heißt die Option eventuell anders. Beim üblichen ld heißt sie zum Beispiel -rpath, aber -R versteht er auch wenn ein Pfad folgt. Der gcc reicht diese gängigen Optionen an den Linker weiter, falls nicht musst du -Wl benutzen um Linkeroptionen anzugeben (oder den Linker von Hand aufrufen).

    Ob alles geklappt hat, kannst du mit ldd rausfinden.



  • deinen vorherigen Post nicht gesehen



  • bekomm immernoch den selben Fehler.

    Wärst du vll so nett und könntest die 1-2 Shell-Befehle posten.
    Das Internet ist auch nciht so wirklich hilfreich was das angeht. Ist mein Problem so unüblich?



  • Wahrscheinlich ja. Normalerweise werden Anwendungen installiert. Du kannst aber alle Dateien in ein Verzeichnis kopieren und dein Programm über ein Script starten. Darin kannst du auch über LD_LIBRARY_PATH das Verzeichnis für die Bibliotheken setzen, falls es notwendig sein sollte. Absolute Pfade lassen sich über Shell-Variablen auflösen.

    http://tldp.org/LDP/abs/html/


  • Mod

    Jud4s schrieb:

    bekomm immernoch den selben Fehler.

    Wärst du vll so nett und könntest die 1-2 Shell-Befehle posten.
    Das Internet ist auch nciht so wirklich hilfreich was das angeht. Ist mein Problem so unüblich?

    Es sollte dies hier gehen:

    g++ -o Tester main.cpp -lModelv0.1 -L../lib/ -R../lib/
    

    Danach kannst du mit

    ldd Tester
    

    rausfinden, wo die Libs gesucht werden.



  • probier mal ldconfig evtl. auch sudo ldconfig, danach sollte es wohl gehen. (Also ldconfig -v ../mydir mylib oder so...)


Anmelden zum Antworten