C++ 未定义的符号参考';pthread_rwlock_wrlock@@GLIBC_2.2.5';
我也在使用WebRTC的ROS项目中工作 我的问题是,当我尝试构建我的项目时,我得到了以下结果:C++ 未定义的符号参考';pthread_rwlock_wrlock@@GLIBC_2.2.5';,c++,linux,ros,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/libp
/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
在其他有类似问题的帖子中搜索,我得出了一个结论,我必须将cmakeflag“-pthread”
添加到g++
使用VERBOSE=1
和catkin\u make
我意识到,实际上,导致问题的.cc文件需要该标志。但我不知道如何添加它
我尝试了set(CMAKE\u CXX\u FLAGS“${CMAKE\u CXX\u 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})
这是一张冗长的柳絮:
/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/libroscpp.so-lboost_-signals-lboost_文件系统/opt/ROS/kinetic/librosconsole/librosconsole.so/opt/ROS/librosconsole/log4cxx.so/opt/ros/kinetic/lib/librosconsole_backend_interface.so-llog4cxx-lboost_regex/opt/ros/kinetic/lib/kinetic/libroscpp.so/libroscpp_serialization.so/ros/kinetic/librostime.so/opt/ros/kinetic/libcpp_common.so-lboost_系统-lboost_线程-lboost_计时-lboost_日期(时间-lboost(lboost)lboost)原子线程-lcoose(桥/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})
您是否尝试过目标链接库(webrtcbridge\u node pthread)?您引用的详细文本中已经有
lpthread
,因此您的问题可能不是这样。是的,我尝试过,但问题仍然存在@hnefatl。这些解决方案是我在其他帖子中看到的不同选项之一。尽管不建议使用link\u directories()
,但您可以尝试:link\u directories(/usr/lib/x86\u 64-linux-gnu)
和目标链接库(webrtcbridge\u node-lpthread)
?