Eigene Shared Library kompiliert aber Header Datei wird nicht gefunden



  • Hallo liebe Forengemeinde,

    ich habe mir eine eigene Shared Library kompiliert. Das funktioniert auch soweit. Jetzt möchte ich diese Library durch -L/usr/lib -lbeispiel zu einem anderen Projekt hinzu linken. Dabei wirft der Compiler mir folgende Fehlermeldung:

    main.cpp:2:23: error: Beispiel.h: No such file or directory

    Die Library liegt definitiv im /usr/lib Ordner.
    Das neue Projekt habe ich mit

    export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
    g++ -L/usr/lib main.cpp -lbeispiel

    kompiliert.
    Brauch ich etwa auch die Header Dateien im /usr/include Ordner oder so??
    Wenn ihr noch weitere Infos braucht sagt bescheid! 🙂
    Vielen Dank im Voraus!!



  • natürlich muss der Compiler auch die Header finden. Wie soll das sonst funktionieren? Du kannst mittels der -I-Option den include-Pfad setzen.



  • Ok danke dir! Hätte noch ne Frage damit ich weiß ob ich das auch wirklich verstanden habe mit den Libs.

    - Libraries sind so ne Art Archiv mit versch. Funktionen?
    - Libraries werden beim Ausführen des Programmes benötigt bzw. geladen?
    - Header Dateien braucht man nur zum kompilieren?
    - Header Dateien werden beim Ausführen des Programmes nicht benötigt?

    Ist das so richtig bzw. gibts auch noch was zu Ergänzen? 🙂



  • Ja
    Ja (jedenfalls bei einer Shared-Library)
    Ja
    Ja



  • Nun bringt der Compiler beim kompilieren folgenden Fehler:

    g++: -lbeispiel: linker input file unused because linking not done

    danach kommt

    ... undefined reference to ...

    was wohl mit der ersten Fehlermeldung zu tun hat.

    Ich binde die Datei wie folgt ein

    #include <Beispiel.h>
    

    und kompilieren

    CC = g++
    DEBUG = -g
    CXXFLAGS = -O2 -Wall -O -c $(DEBUG)
    LDFLAGS = -L/usr/lib -lbeispiel -I/usr/include

    OBJECTS = main.o

    all: a.out

    a.out: (OBJECTS)(OBJECTS) (CC) $(OBJECTS)

    main.o: main.cpp
    $(CC) $(CXXFLAGS) $(LDFLAGS) main.cpp

    Sieht da jemand einen Fehler bzw. welche Gründe könnten die obigen Fehlermeldungen haben?



  • Ich glaube du weißt noch nicht genau was ein Linker macht und was Objektdateien sind.

    Sagen wir mal so. Der Compiler Produziert Objektdateien und der Linker erzeugt daraus ausführbare Dateien oder Libraries. Mit dem Flag -c sagst du dem GCC, das er vor dem Linken aufhören und nur die Objektdatei ausgeben soll. Das läuft ja auch wunderbar.

    Aber wenn du nun das eigentliche Linken durchführen lässt, also den GCC aufrufst, um das Binary erzeugen zu lassen, dann musst du die Library mit übergeben. Nicht beim kompilieren.

    (das ist ja auch das was die Fehlermeldung dir sagt).



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix 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.



  • Ah cool danke dir! Hab's geschafft. Hab weiterhin die Objektdateien mit der -c Option des gcc erstellt. Die Library hab ich dann beim gcc Aufruf bei dem ich aus den Objekten das Binary erstelle hinzu gelinkt! 🙂


Anmelden zum Antworten