我也在一个使用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=1
和catkin_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的文章:
/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.so -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 **"here should be -pthread I think"**,-rpath,/opt/ros/kinetic/lib
你知道在结尾设置“pthread”吗?
最佳答案
“缺少DSO”-DSO是动态共享对象。您需要将线程库链接到可执行文件。
试试这个:
find_package(Threads)
...
target_link_libraries(webrtcbridge_node ${CMAKE_THREAD_LIBS_INIT})