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.
KanoPS :
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
#includein deiner prog.cpp in einenextern "C" {}Block zu verpacken.
-
Hast du meine Frage gelesen?
Könntest du die Ausgabe von
make VERBOSE=1hier posten?