Zugriff auf Shared Library Funktionen



  • Hallo,

    ich habe mit CLion eine Shared Library entwickelt, welche - nicht sehr aufregend - das Quadrat einer Zahl zurückgibt 😎 Diese sollte ja nur für Testzwecke sein.

    Jetzt hab ich ein anderes CLion C++ Projekt, welches diese Funktion aufrufen soll. Ich hab einen libs-Ordner gemacht und in der CMake mit

    add_library(libSharedLibraryTest SHARED ${SOURCE_FILES})
    

    hinzugefügt. Soweit alles klar, kompilieren kann ichs problemlos. Nur weiss ich leider nicht, wie ich diese Funktion aufrufe, meine Shared Library besteht nur aus library.cpp und library.h. Wenn ich ich diese library.h inkludiere, findet der Compiler sie klarerweise nicht. Dr. Google hat mir auch nichts gebracht, drum hab ich gedacht, ich frag mal hier nach 😃

    Kann mir jemand helfen?

    Thx & Lg
    buzzzz



  • findet der Compiler sie klarerweise nicht

    Keine Ahnung was daran klar ist, aber du hast ein Problem mit CLion und deinem Projekt, nicht mit C++.



  • In den Projekteinstellungen in CLion muss es irgendwas geben, wo du den Pfad zur Header angeben kannst.



  • Du mußt das Verzeichnis indem sich Deine Header befindet in den Includepfad Deines Projektes mit aufnéhmen. In cmake geht das mit

    include_directories()

    VG



  • Danke für eure Antworten.

    habs jetzt mit

    include_directories(libs/libSharedLibraryTest.so)
    

    in das CMake aufgenommen, builden kann ichs gleich, mit #include <library.h> oder #include "library.h" findet er die entsprechende Header wieder nicht.

    Fehlermeldung:

    fatal error: library.h: No such file or directory
    compilation terminated.
    CMakeFiles/GsGTests.dir/build.make:62: recipe for target 'CMakeFiles/GsGTests.dir/main.cpp.o' failed
    make[3]: *** [CMakeFiles/GsGTests.dir/main.cpp.o] Error 1
    CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/GsGTests.dir/all' failed
    make[2]: *** [CMakeFiles/GsGTests.dir/all] Error 2
    CMakeFiles/Makefile2:116: recipe for target 'CMakeFiles/GsGTests.dir/rule' failed
    make[1]: *** [CMakeFiles/GsGTests.dir/rule] Error 2
    Makefile:131: recipe for target 'GsGTests' failed
    make: *** [GsGTests] Error 2
    

    lg



  • "libs/libSharedLibraryTest.so" ist wohl kaum ein Verzeichnis.
    Entweder du gibst die Pfade zu dem anderen Projekt an (absolut oder relativ) oder aber du kopierst "library.h" als auch "library.so" in dein Hauptprojekt und bindest diese dann ein.



  • Hallo,

    thx jetzt hab ichs... hab mit link_directories und include_directories den Pfad zur .so angegeben und zur entsprechenden Header-Datei.

    Aber ich glaub ich hab da jetzt noch ein Verständnisproblem; ich dachte, ich könnte mit dem Einbinden der .so-Datei gleich auf alle Funktionen zugreifen... müssen die Header immer explizit verlinkt oder in das Projekt kopiert werden? Gibts da nicht noch einen anderen Weg?

    Lg
    buzzzzz



  • Der Compiler benötigt die Header-Datei, damit die Funktionsdeklarationen (und Typen etc.) bekanntgemacht werden - und der Linker bindet dann die Library hinzu.



  • Soweit ist das schon klar, andererseits habe ich mir gedacht, ich kann mir das explizite Einbinden der Header-Files sparen... einfach die .so rein und erledigts ists. Dann müssen die Header halt auch rein.

    Danke für eure Hilfe & Lg
    buzzz


Log in to reply