2016-08-15 4 views
0

In meinem Projekt möchte ich xbee external library mit ROS verwenden. Ursprünglich, wenn ich EXE-Datei mache, benutze ich Makefile. Aber da ROS Catkin verwenden, muss ich exe-Datei mit Cmakelists.txt machen Aber ich bin auf den gleichen Fehler stecken undefined reference .., auch ich folgte jeder Richtung, die ich kann.undefined Referenz mit Cmakelists.txt

Die Verzeichnisstruktur meines Projekts sieht wie folgt aus.

. 
├── xbee_ansic_library 
    ├── include - 3 subdirectories have h file 
     ├── wpan 
     ├── xbee 
     └── zigbee 
    ├── src - subdirectories have c file 
     ├── wpan 
     ├── xbee 
     └── zigbee    
└── my_project 
     ├── src 
      └── main.cpp 
     └── CMakeLists.txt 

und seit original Make-Datei wie this aussehen wurde, schrieb ich my_project/CMakeLists.txt wie unten.

project(my_project) 

## Declare a catkin package 
catkin_package() 

# %EndTag(FULLTEXT)% 

include_directories(include ${catkin_INCLUDE_DIRS}) 
include_directories(~/catkin_ws/src/xbee_ansic_library/include) 
include_directories(~/catkin_ws/src/my_project/include) 

LINK_DIRECTORIES(~/catkin_ws/src/xbee_ansic_library/src) 
LINK_DIRECTORIES(~/catkin_ws/src/my_project/src) 

add_library(base_OBJECTS 
${xbee_ansic_library_SRC_POSIX}/xbee_platform_posix.c 
${xbee_ansic_library_SRC_POSIX}/xbee_serial_posix.c 
${xbee_ansic_library_SRC_UTIL}/hexstrtobyte.c 
${xbee_ansic_library_SRC_UTIL}/memcheck.c 
${xbee_ansic_library_SRC_UTIL}/swapbytes.c 
${xbee_ansic_library_SRC_UTIL}/swapcpy.c 
${xbee_ansic_library_SRC_UTIL}/hexdump.c src/parse_serial_args.c) 

add_library(xbee_OBJECTS 
${base_OBJECTS} 
${xbee_ansic_library_SRC_WPAN}/wpan_types.c 
${xbee_ansic_library_SRC_XBEE}/xbee_device.c 
${xbee_ansic_library_SRC_XBEE}/xbee_atcmd.c) 

.... 


add_executable(main src/main.cpp) 
target_link_libraries(main ${catkin_LIBRARIES} main_OBJECTS) 
add_dependencies(main my_project_generate_messages_cpp) 

Aber wenn ich mit catkin_make Befehl, ich habe Fehler

CMakeFiles/main.dir/src/main.cpp.o: In function main': main.cpp:(.text+0x177): undefined reference to xbee_dev_dump_settings' collect2: error: ld returned 1 exit status

Aber xbee_dev_dump_settings ist in der xbee_ansic_library/include/xbee/device.h, xbee_ansic_library/src/xbee/xbee_device.c. Da Fehler ist undefined reference .. nicht, not declared .. Ich denke, dass ich gut mit Kopfzeilen.

Was sollte als nächstes tun?

Antwort

0

Der Fehler liegt in der Verknüpfungsstufe und ist wahrscheinlich mit Ihrer target_link_libraries Zeile verbunden. Ich glaube, dass es auch die xbee- und Basisbibliotheken spezifizieren sollte, die du verursachst, also es zu ändern, sollte funktionieren:

target_link_libraries(main ${catkin_LIBRARIES} base_OBJECTS xbee_OBJECTS)