Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未定义的符号参考';pthread_rwlock_wrlock@@GLIBC_2.2.5';_C++_Linux_Ros - Fatal编程技术网

C++ 未定义的符号参考';pthread_rwlock_wrlock@@GLIBC_2.2.5';

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

我也在使用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
在其他有类似问题的帖子中搜索,我得出了一个结论,我必须将
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)