Link problem bei Cmake



  • Hallo zusammen,

    ich möchte eine c -Library in mein c++ Proramm verwenden aber
    ich habe eine Problem mit dem Linken von s SHARED_LIBS per Cmake :

    Hier ist mein cmakeLists.txt:

    cmake_minimum_required(VERSION 2.8)
    
    SET(PNAME cprogram)
    PROJECT(${PNAME})
    
    include_directories (/usr/local/SGPx/include)
    
    SET(SRCS prog.c)
    ADD_EXECUTABLE(${PNAME} ${SRCS})
    link_directories(usr/local/SGPx/lib)
    

    In Verzeichnis inculde befnidet sich die Headerdatei sgp.h und lib ist
    die object files libsgp.a libsgp.so
    hier ist die Meldung:

    Scanning dependencies of target cprogram
    [100%] Building C object CMakeFiles/cprogram.dir/prog.c.o
    Linking C executable cprogram
    CMakeFiles/cprogram.dir/prog.c.o: In function `spp_test':
    prog.c:(.text+0x2f4): undefined reference to `Conver_Data'
    prog.c:(.text+0x379): undefined reference to `sffcall'
    prog.c:(.text+0x3b8): undefined reference to `smmp'
    prog.c:(.text+0x3f7): undefined reference to `dd4'
    

    kann mir da jamend weiterhelfen und zeigt wie ich die Library includieren und linken kann.

    Danke schönmal im voraus.
    Kano

    PS :
    wenn ich das Programm mit gcc in Terminal compiliere, meldet keine fehler und zwar so:

    /cprog$ gcc prog.c -L/home/marx/program/cprog/sgplib -lsgplib
    


  • In der CmakeList.txt gibst du niergends an, dass die lib "sgplib" gelinkt werden soll...



  • Hallo firefly,

    hast du recht, ich habe es wie gefolgt geändert;

    cmake_minimum_required(VERSION 2.8)
    
    SET(PNAME cprogram)
    PROJECT(${PNAME})
    
    include_directories (/usr/local/SGPx/include)
    SET(SRCS prog.c)
    
    add_executable(${PNAME} ${SRCS})
    link_directories(/usr/local/SGPx/lib)
    target_link_libraries(${PNAME} sgplib)
    

    aber nun meldet mir die Compiler diese Fehler:

    /cprog/build$ make
    Scanning dependencies of target cprogram
    [100%] Building C object CMakeFiles/cprogram.dir/prog.c.o
    Linking C executable cprogram
    /usr/bin/ld: cannot find -lsgplib
    collect2: error: ld returned 1 exit status
    make[2]: *** [cprogram] Fehler 1
    make[1]: *** [CMakeFiles/cprogram.dir/all] Fehler 2
    make: *** [all] Fehler 2
    


  • ist in dem angegeben pfad überhaupt die lib installiert?
    in deinem gcc beispiel hast du einen anderen library suchpfad angegeben als im cmake file....



  • Hallo zusammen,

    ich muss doch noch an euch wieder anwenden,anscheined lasst mich dies
    Link Problem nicht weiterkommen.
    Nun habe ich die Source Endung ( .c) in (.cpp) geändert und schön wieder
    taucht bei der Kompilierung die Linke Fehler auf.

    hier ist CMakeLists.txt:

    cmake_minimum_required(VERSION 2.8)
    
    SET(PNAME cprogram)
    PROJECT(${PNAME})
    
    include_directories (/usr/local/SGPx/include)
    link_directories(/usr/local/SGPx/lib)
    
    SET(SRCS prog.cpp)                  #aenderung .c in .cpp
    
    add_executable(${PNAME} ${SRCS})
    
    target_link_libraries(${PNAME} sgp)
    target_link_libraries(${PNAME} m)
    

    Die Meldung von Compieler:

    /cprog/build$ make
    Scanning dependencies of target cprogram
    [100%] Building CXX object CMakeFiles/cprogram.dir/prog.cpp.o
    Linking CXX executable cprogram
    CMakeFiles/cprogram.dir/prog.cpp.oIn function `spp_test':
    prog.c:(.text+0x2f4): undefined reference to `Conver_Data'
    prog.c:(.text+0x379): undefined reference to `sffcall'
    prog.c:(.text+0x3b8): undefined reference to `smmp'
    prog.c:(.text+0x3f7): undefined reference to `dd4'
    

    wie gesagt wenn ich die saurce Endung mit .c versehen würde, meldet der Kompieler keinen fehler.

    danke schön mal im veraus für jede Hilfe

    Gruß
    Kano



  • Wahrscheinlich bekommst du jetzt Name Mangling auf deinen includierten SGPx Header.

    Probier mal das entsprechende #include in deiner prog.cpp in einen extern "C" {} Block zu verpacken.



  • Hast du meine Frage gelesen?

    Könntest du die Ausgabe von

    make VERBOSE=1
    

    hier posten?


Anmelden zum Antworten