【问题标题】:undefined reference to symbol '_ZN5boost6system15system_categoryEv' /未定义对符号 '_ZN5boost6system15system_categoryEv' 的引用 /
【发布时间】:2019-02-04 05:31:31
【问题描述】:

这不是我第一次遇到这个错误,但是 [previous solution][1] 没有意义。

[100%] 链接 CXX 可执行文件 ../bin/qttest /usr/bin/x86_64-linux-gnu-ld: CMakeFiles/qttest.dir/src/main.cpp.o: 未定义对符号“_ZN5boost6system15system_categoryEv”的引用 /usr/lib/x86_64-linux-gnu/libboost_system.so:添加符号时出错: 命令行 collect2 中缺少 DSO:错误:ld 返回 1 个退出 状态

这是我的 cmakelists

cmake_minimum_required(VERSION 2.4.6)
set(OpenCV_DIR "/usr/local/opencv-2.4.9/share/OpenCV")
include_directories("/usr/local/opencv-2.4.9/include")
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
find_package(Qt4 COMPONENTS QtCore QtGui)
find_package(OpenCV 2.4.9 REQUIRED)
INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})
rosbuild_init()
rosbuild_genmsg()
find_package(Boost COMPONENTS system REQUIRED)
set(qt_srcs
    src/mainwindow.cpp
    src/listnerthr.cpp
    src/ros_thr.cpp
    src/CreatDataBuffer.cpp
    src/CreatBuffer.cpp
    src/pid_controller.cpp
    src/low_pass_filter.cpp

    src/plot_publisher.cpp)
set(qt_hdrs
    src/mainwindow.h
    src/listnerthr.h
    src/ros_thr.h
    src/CreatDataBuffer.h
    src/HelperFunctions.h
    src/CreatBuffer.h
    src/pid_controller.h
    src/low_pass_filter.h

    src/plot_publisher.h)
qt4_automoc(${qt_srcs})
QT4_WRAP_CPP(qt_moc_srcs ${qt_hdrs})
QT4_WRAP_UI(uis_h src/mainwindow.ui)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
rosbuild_add_executable(qttest src/main.cpp
    ${uis_h} ${qt_srcs} ${qt_moc_srcs})
target_link_libraries(qttest ${QT_LIBRARIES}${Boost_LIBARAIES }${OpenCV_LIBARAIES})

任何线索将不胜感激。


更改 cmakelists 后我遇到了另一个问题

*** No rule to make target '/usr/lib/x86_64-linux-gnu/libboost_system.so/usr/lib/x86_64-linux-gnu/libboost_system.so', needed by '../bin/qttest'. Stop. CMakeFiles/Makefile2:425: recipe for target 'CMakeFiles/qttest.dir/all' failed –

【问题讨论】:

  • 你没有将 boost 库传递给target_link_libraries
  • 什么是${Boost_LIBS }?为什么这个变量后面没有空格?完全复制我的答案中的行。
  • @ixSci,我很抱歉这个粗心的错误。我已经修改并检查了我正在使用的 cmakelists。但这个问题仍然存在。

标签: boost cmake


【解决方案1】:

您应该将 boost 库传递给 target_link_libraries 命令。对文件的最小更改如下:

target_link_libraries(qttest ${QT_LIBRARIES} ${LIBS})

但由于您使用 find_package 进行 Boost,并且您实际上并没有在任何地方使用您的 LIBS 变量,您应该坚持这样的做法:

find_package(Boost COMPONENTS system REQUIRED)
...
target_link_libraries(qttest ${QT_LIBRARIES} ${OpenCV_LIBS} ${Boost_LIBRARIES})

并完全删除LIBS

【讨论】:

  • 我按照您的提示进行操作,但是在编译此项目时遇到了另一个问题。*** 没有规则可以制作目标 '/usr/lib/x86_64-linux-gnu/libboost_system.so/usr/lib /x86_64-linux-gnu/libboost_system.so','../bin/qttest' 需要。停止。 CMakeFiles/Makefile2:425:目标“CMakeFiles/qttest.dir/all”的配方失败
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
相关资源
最近更新 更多