在CmakeList中链接Boost库的麻烦

问题描述:

你好,我在CmakeList和Boost的依赖方面遇到了麻烦。我CmakeList看起来是这样的:在CmakeList中链接Boost库的麻烦

cmake_minimum_required(VERSION 2.8.3) 
project(cpp_arm) 

add_compile_options(-std=c++11) 

find_package(catkin REQUIRED COMPONENTS 
    moveit_core 
) 

find_package(Boost REQUIRED COMPONENTS 
    system 
    filesystem 
    date_time 
    thread 
) 

catkin_package() 

include_directories(${catkin_INCLUDE_DIRS}) 
include_directories(SYSTEM ${Boost_INCLUDE_DIRS}) 

add_executable(hello_world src/hello_world.cpp) 
add_executable(test_arm src/test_arm.cpp) 

target_link_libraries(cpp_arm ${Boost_LIBRARIES}) 


install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 
    PATTERN "setup_assistant.launch" EXCLUDE) 
install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 

首先我有这个,我couldn't完成catkin_make烦恼。我没有下面的代码:

target_link_libraries(cpp_arm ${Boost_LIBRARIES}) 

这给了我以下错误:

CMakeFiles/test_arm.dir/src/test_arm.cpp.o: In function `_GLOBAL__sub_I_main': 
test_arm.cpp:(.text.startup+0x43): undefined reference to `boost::system::generic_category()' 
test_arm.cpp:(.text.startup+0x48): undefined reference to `boost::system::generic_category()' 
test_arm.cpp:(.text.startup+0x4d): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

寻找这个错误了,我发现不同的主题在这个(堆栈)后说,你需要链接cmakelist中的boost库让cmake“找到”它。我这样做,因为我的代码所示(相应于提及的话题中描述的语法),但是这将导致一个新的错误:

CMake Error at cpp_arm/CMakeLists.txt:25 (target_link_libraries): 
    Cannot specify link libraries for target "cpp_arm" which is not built by 
    this project. 

当我抬起头来的错误我主要是看到题目说的链接库的语法是不正确的,问题是我的语法与解决方案主题中提到的语法相同。

为什么我得到这个错误,我该如何解决这个问题?

在此先感谢

编辑:我看到有什么我的项目其实是有些混乱。我正在运行一个ROS包,它是通过MoveIT设置助手创建的,该助手为我的catkin_workspace中的ROS生成一个包。在此工作区中,我的软件包文件夹位于名称cpp_arm。在这个包/文件夹里面是我的CmakeList,在这个文件夹里面还有一个文件夹src它包含一个简单的C++文件(test_arm.cpp)。

这CPP文件看起来像这样:

#include <moveit/move_group_interface/move_group_interface.h> 

main() 
{ 

} 

我在Ubuntu上add_libraryadd_executable创建目标16.04

+0

你是否正在交叉编译?或者是你的开发机器ARM? cpp_arm是红鲱鱼吗? – sehe

target_link_libraries工程运行ROS动能版本:cpp_arm是你的项目的名称,但您没有使用此名称创建的目标。事情是这样的:

add_executable(cpp_arm ...) 
target_link_libraries(cpp_arm ${Boost_LIBRARIES}) 

但我猜你想达到什么是更多链接test_arm

add_executable(test_arm src/test_arm.cpp) 

target_link_libraries(test_arm ${Boost_LIBRARIES}) 

顺便说一句,而不是:

add_compile_options(-std=c++11) 

让CMake根据所选标准处理编译选项:

set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_STANDARD_REQUIRED ON) 

也可以考虑compile features

+0

谢谢,这确实是“问题”。 –