【问题标题】:uable to solve undefined reference to symbol with cmake无法使用 cmake 解决对符号的未定义引用
【发布时间】:2013-09-12 18:02:54
【问题描述】:

尝试制作我下载的程序时出现以下错误。

CMakeFiles/ptcloud_vslam_node.dir/src/nodes/ptcloud_vslam_node.cpp.o:未定义对符号'pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'的引用

/usr/bin/ld: 注意:'pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)' 在 DSO /opt/ros/groovy/lib 中定义/libpcl_common.so.1.6 所以尝试将它添加到链接器 命令行

/opt/ros/groovy/lib/libpcl_common.so.1.6:无法读取符号:无效操作

我尝试在我的 cmake 文件中添加以下内容

    LINK_DIRECTORIES(/opt/ros/groovy/lib/libpcl_common.so.1.6)
    TARGET_LINK_LIBRARIES(ptcloud_vslam_node libpcl_common.so.1.6)

但是在运行 cmake 时出现以下错误

CMakeLists.txt:51 (TARGET_LINK_LIBRARIES) 处的 CMake 错误: 无法为目标“ptcloud_vslam_node”指定链接库,这不是 由该项目构建。

我应该对我的 cmake 文件进行哪些修改以修复链接错误?

非常感谢

【问题讨论】:

  • 您只能在调用函数时指定 CMake 已识别的实际目标上链接到的库。在 TARGET_LINK_LIBRARIES 之前是否正确指定了 ptcloud_vslam_node?​​span>
  • 下面是在TARGET_LINK_LIB之后定义的# stereo & ptcloud VSLAM as a ROS node rosbuild_add_executable(ptcloud_vslam_node src/nodes/ptcloud_vslam_node.cpp) target_link_libraries(ptcloud_vslam_node vo ${Boost_LIBRARIES})是你说的规范吗?

标签: c++ linker cmake


【解决方案1】:

它说“链接目录”,但你传递给它一个实际的库,错误是不愉快的,因为由于某种原因它想要构建ptcloud_vslam_node,它似乎没有意识到你正在尝试指定它。

请发布更多信息并对此答案添加评论,我会回来查看。

Symbol not found when using template defined in a library

这将解释链接的工作原理,然后您可能会更好地理解错误。

【讨论】:

  • 啊,多么愚蠢的错误,我更正了“链接目录”以指向一个目录。但同样的错误仍然存​​在。我应该如何配置 cmake 文件以使链接器与上述库链接?
  • 我找到了导致“无法为目标指定链接库”错误的原因。似乎创建的原始文件已经为ptcloud_vslam_node 指定了一个 TARGET_LINK_LIBRARY
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2021-05-21
  • 2023-03-27
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多