0

私はほぼすべてのライブラリ リンク チュートリアルを読みましたが、特定の問題に対して機能するものはありませんでした。

これらのファイルとフォルダーを含む VSCOM_API_TEST というフォルダーがあります。

VSCOM_API_TEST/CMakeLists.txt
VSCOM_API_TEST/include/vs_can_api.h
VSCOM_API_TEST/include/startup.h
VSCOM_API_TEST/lib/libvs_can_api.so
VSCOM_API_TEST/lib/libvs_can_api.a
VSCOM_API_TEST/src/startup.cpp

startup は、ライブラリを含めたい実行可能ファイルです。

そして、私のプログラムがライブラリ関数を見つけられないという問題があります:

CMakeFiles/startup.dir/src/startup.o: In function main: /home/max/fuerte_workspace/sandbox/VSCOM_API_TEST/src/startup.cpp:6: undefined reference to VSCAN_Open

CMakeLists.txt

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)


rosbuild_init()

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#common commands for building c++ executables and libraries
rosbuild_add_library(${PROJECT_NAME} lib/libvs_can_api.a)
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
rosbuild_add_executable(startup src/startup.cpp)
#target_link_libraries(startup ${PROJECT_NAME}) 

スタートアップ.cpp

// ROS includes
#include <ros/ros.h>
#include <vs_can_api.h>
int main(int argc, char** argv)
{
VSCAN_HANDLE handle = VSCAN_Open("192.168.5.10:23", VSCAN_MODE_NORMAL);

VSCAN_API_VERSION *version;
VSCAN_STATUS status;
VSCAN_HWPARAM *hwParams;

// API Version
status = VSCAN_Ioctl(handle, VSCAN_IOCTL_GET_API_VERSION, &version);

//HW Version
status = VSCAN_Ioctl(handle, VSCAN_IOCTL_GET_HWPARAM, &hwParams);


}  

では、プリコンパイル済みライブラリを追加するにはどうすればよいでしょうか?

4

1 に答える 1

1

私は rosbuild にまったく詳しくありませんが、次の点が役立つかもしれません。

  • ビルドされた exe とライブラリの出力パスがソース ツリーの一部になるように変更するのは珍しいことです。おそらく行を削除したいでしょうset(EXECUTABLE/LIBRARY_ ...)
  • rosbuild_add_libraryCMake のadd_libraryコマンドのラッパーであり、コンパイルされたライブラリと組み合わせて使用​​することを意図していません。代わりに、ライブラリの作成に必要なソースを定義するために使用されます。この行も削除する必要があります。
  • を to に設定するLINKER_LANGUAGEことCはおそらく不要であり、CXXとにかくそうすべきです。
  • target_link_libraries コンパイル済みライブラリにリンクするために使用するコマンドですただし、2 番目の引数としてライブラリへのフル パスを指定する必要があります。

したがって(テストせずに)次の CMakelists.txt を試すことをお勧めします

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
rosbuild_init()
rosbuild_add_executable(startup src/startup.cpp)
target_link_libraries(startup ${CMAKE_CURRENT_LIST_DIR}/lib/libvs_can_api.a)
于 2012-10-15T23:19:46.400 に答える