0

私のプロジェクトでは、ROSでxbee 外部ライブラリを使用したいと考えています。もともとexeファイルを作るときはmakefileを使っています。しかし、ROS は catkin を使用するため、exe ファイルを作成する必要があります。 しかし、私は同じエラーで立ち往生しています。Cmakelists.txtundefined reference ..

私のプロジェクトのディレクトリ構造は次のようになります。

.
├── 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はこんな感じだったので、 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: 関数main': main.cpp:(.text+0x177): undefined reference toxbee_dev_dump_settings の collect2: エラー: ld が 1 つの終了ステータスを返しました

しかし、xbee_dev_dump_settingsです。エラーではないので、ヘッダーでうまくいったと思います。xbee_ansic_library/include/xbee/device.hxbee_ansic_library/src/xbee/xbee_device.cundefined reference ..not declared ..

次に何をしなければなりませんか?

4

1 に答える 1

0

エラーはリンク段階にあるため、おそらくtarget_link_libraries回線に関連しています。作成した xbee と基本ライブラリも指定する必要があると思うので、これに変更するとうまくいくはずです。

target_link_libraries(main ${catkin_LIBRARIES} base_OBJECTS xbee_OBJECTS)
于 2016-08-15T10:05:25.513 に答える