2016-08-15 27 views
0

在我的項目中,我想使用xbee external libraryROS。 最初我在製作exe文件時使用了makefile。但是因爲ROS使用catkin,所以我必須使用exe文件Cmakelists.txt 但我被卡在相同的錯誤undefined reference ..,即使我遵循了我所能做到的每一個方向。未定義的引用與Cmakelists.txt

我的項目的目錄結構如下所示。

. 
├── 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 

而且由於原來的makefile是看起來像this,我寫MY_PROJECT /的CMakeLists.txt像下面。

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) 

但是,當我與catkin_make命令,我得到了錯誤

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

xbee_dev_dump_settings是在xbee_ansic_library/include/xbee/device.hxbee_ansic_library/src/xbee/xbee_device.c。 由於錯誤是undefined reference ..不是,not declared ..我認爲我做了很好的標題。

下一步該做什麼?

回答

0

錯誤是在鏈接階段,所以它可能與您的target_link_libraries線有關。我相信它也應該指定你創建的xbee和base庫,所以改變它應該可以工作:

target_link_libraries(main ${catkin_LIBRARIES} base_OBJECTS xbee_OBJECTS)