c++ - undefined symbol 引用 'pthread_rwlock_wrlock@@GLIBC_2.2.5'

标签 c++ linux ros

我也在使用 WebRTC 在 ROS 项目中工作。

我的问题是当我尝试构建我的项目时,我得到了这个:

/usr/bin/ld: /home/carlos/Documentos/ROS_WebRTC/catkin_ws/src/libwebrtc/out/lib/libwebrtc.a(thread_pthread.o): undefined symbol reference 'pthread_rwlock_wrlock@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line

在其他有类似问题的帖子中搜索,我得出的结论是我必须将 CMAKE FLAG "-pthread" 添加到 g++。

使用 VERBOSE=1catkin_make 我意识到,事实上,导致问题的 .cc 文件需要那个标志。但是不知道怎么加。

我已经尝试使用 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lpthread") 但它没有解决任何问题。

这是我的 CMakeFiles.txt:

cmake_minimum_required(VERSION 2.8.3)
project(webrtcbridge)

add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  rospy
  genmsg
)

find_package(LibWebRTC REQUIRED)

catkin_package()

include_directories(
 include ${catkin_INCLUDE_DIRS}
)

include_directories(
include ${LIBWEBRTC_USE_FILE}
)

add_executable(webrtcbridge_node src/webrtcbridge_node.cc)

target_link_libraries (webrtcbridge_node ${catkin_LIBRARIES})
target_link_libraries (webrtcbridge_node ${LIBWEBRTC_LIBRARIES})

这是执行 catkin_make 的一段冗长的代码:

/usr/bin/c++ CMakeFiles/webrtcbridge_node.dir/src/webrtcbridge_node.cc.o -o/home/carlos/Documentos/ROS_WebRTC/catkin_ws/devel/lib/webrtcbridge/webrtcbridge_node -rdynamic/opt/ros/kinetic/lib/libroscpp.so -lboost_signals -lboost_filesystem/opt/ros/kinetic/lib/librosconsole.so/opt/ros/kinetic/lib/librosconsole_log4cxx.so/opt/ros/kinetic/lib/librosconsole_backend_interface.so - llog4cxx -lboost_regex/opt/ros/kinetic/lib/libxmlrpcpp.so/opt/ros/kinetic/lib/libroscpp_serialization.so/opt/ros/kinetic/lib/librostime.so/opt/ros/kinetic/lib/libcpp_common。所以 -lboost_system -lboost_thread -lboost_chrono -lboost_date_time -lboost_atomic -lpthread -lconsole_bridge/home/carlos/Documentos/ROS_WebRTC/catkin_ws/src/libwebrtc/out/lib/libwebrtc.a -lSM -lICE -lX11 -lXext -ldl -lrt - wl **"这里应该是-pthread我觉得"**,-rpath,/opt/ros/kinetic/lib

关于在最后设置“pthread”有什么想法吗?

最佳答案

“DSO 缺失”- DSO 是一个动态共享对象。您需要将线程库链接到您的可执行文件。

试试这个:

find_package(Threads)

...

target_link_libraries(webrtcbridge_node ${CMAKE_THREAD_LIBS_INIT})

关于c++ - undefined symbol 引用 'pthread_rwlock_wrlock@@GLIBC_2.2.5',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281853/

相关文章:

c++ - 在没有 SDL 或 GLUT 的情况下检测按键的最佳方法?

linux - 如何检查我可以通过 ssh 连接到哪些服务器?

c++ - 在构造函数中使用关键字 "this"时定义复制构造函数

python - ImportError : No module named catkin_pkg. 包

c++ - 请求 Float64MultiArray 中非类类型的成员 'resize'

c++ - 如何在 Windows 上为 Dev-C++ 安装 C++ 库

c++ - 为什么我的解密函数更加加扰密文,而不是解密它?

c++ - 从文件中加载 const 命名空间变量值

Linux 某类文件修改后如何执行命令?

linux - FFMPEG 在一个命令行中将图像与视频和流结合起来