Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此共享库添加到我的CMakeLists.txt?_Cmake_Ubuntu 12.04_Ros - Fatal编程技术网

如何将此共享库添加到我的CMakeLists.txt?

如何将此共享库添加到我的CMakeLists.txt?,cmake,ubuntu-12.04,ros,Cmake,Ubuntu 12.04,Ros,我阅读了几乎所有的图书馆链接教程,但没有一个能解决我的具体问题 我有一个名为VSCOM_API_TEST的文件夹,其中包含以下文件和文件夹: VSCOM_API_测试/CMakeLists.txt VSCOM\u API\u TEST/include/vs\u can\u API.h VSCOM\u API\u TEST/include/startup.h VSCOM_API_TEST/lib/libvs_can_API.so VSCOM_API_TEST/lib/libvs_can_API.

我阅读了几乎所有的图书馆链接教程,但没有一个能解决我的具体问题

我有一个名为VSCOM_API_TEST的文件夹,其中包含以下文件和文件夹:


VSCOM_API_测试/CMakeLists.txt
VSCOM\u API\u TEST/include/vs\u can\u API.h
VSCOM\u API\u TEST/include/startup.h
VSCOM_API_TEST/lib/libvs_can_API.so
VSCOM_API_TEST/lib/libvs_can_API.a
VSCOM_API_测试/src/startup.cpp

startup是我想要包含库的可执行文件

我有一个问题,我的程序找不到库函数:

cmakfiles/startup.dir/src/startup.o:在函数main中:
/home/max/fuerte_workspace/sandbox/VSCOM_API_TEST/src/startup.cpp:6:未定义对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}) 
// 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);


}  
startup.cpp

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}) 
// 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);


}  
//ROS包括
#包括
#包括
int main(int argc,字符**argv)
{
VSCAN_句柄=VSCAN_打开(“192.168.5.10:23”,VSCAN_模式正常);
VSCAN_API_版本*版本;
VSCAN_状态;
VSCAN_HWPARAM*hwParams;
//API版本
状态=VSCAN\u Ioctl(句柄、VSCAN\u Ioctl\u获取\u API\u版本和版本);
//硬件版本
状态=VSCAN_Ioctl(句柄、VSCAN_Ioctl_GET_HWPARAM和hwParams);
}  

那么如何添加预编译库呢

我对rosbuild一点也不熟悉,但以下几点可能会有所帮助:

  • 将构建的EXE和LIB的输出路径更改为源代码树的一部分是不常见的。您可能需要删除
    集合(可执行文件/库…
  • 是CMake命令的包装器,不打算与编译库一起使用。相反,它将用于定义创建库所需的源。这一行也应该删除
  • LINKER\u LANGUAGE
    设置为
    C
    可能是不必要的,而且可能应该是
    CXX
  • 要用于链接到已编译库的命令。但是,您需要提供库的完整路径作为第二个参数
因此(未经测试)我建议您尝试以下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)

完全正确,尽管我可能建议使用${PROJECT\u SOURCE\u DIR}而不是${CMAKE\u CURRENT\u LIST\u DIR}。