gpt4 book ai didi

c++ - 无法在 CmakeList 中链接 Boost 库

转载 作者:行者123 更新时间:2023-11-27 23:53:21 25 4
gpt4 key购买 nike

你好,我在使用 CmakeList 和依赖 Boost 时遇到了问题。我的 CmakeList 看起来像这样:

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

首先,我遇到了无法完成 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 16.04 上运行 ROS kinetic 版本

最佳答案

target_link_libraries适用于使用 add_libraryadd_executable 创建的目标: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 .

关于c++ - 无法在 CmakeList 中链接 Boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com