(已解决)undefined reference to symbol ‘pthread_create@@GLIBC_2.2.5’

  • Post author:
  • Post category:其他


undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

解决方法

使用命令行

$locate  libpthread.a
/usr/lib/i386-linux-gnu/libpthread.a
/usr/lib/x86_64-linux-gnu/libpthread.a
/usr/local/MATLAB/R2017b/sys/tcc/linux32/lib/libpthread.a

在camkelist中加入libpthread.a

该方法不可行

解决方法一:

cmakelist中添加

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")

解决方法二

更改cmakelist如下图所示

cmake_minimum_required(VERSION 2.8)

PROJECT(cap)
find_package( OpenCV REQUIRED )


include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

#if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
#set(BOOST_THREAD_LIBRARY boost_thread-mt -pthread)
#else()
set(BOOST_THREAD_LIBRARY boost_thread -pthread)//新添加

#include_directories("/usr/local/ffmpeg/include")
include_directories(/usr/local/ffmpeg/include)
link_directories(/usr/local/ffmpeg/lib)
link_directories(/usr/lib/x86_64-linux-gnu)
ADD_EXECUTABLE(test_ffmpeg_decode_show test_ffmpeg_decode_show.cpp)

target_link_libraries(test_ffmpeg_decode_show 
	libavutil.so 
	libavcodec.so 
	libavformat.so 
	libswresample.so 
	libswscale.so
	libavdevice.so
	libpthread.so//新添加
	${OpenCV_LIBS} 
)

问题解决!

参考博客:https://blog.csdn.net/wangyjfrecky/article/details/80760093



版权声明:本文为weixin_45617478原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。