编译openpose出现链接错误(cameraParameterReader.cpp.o R_X86_64_PC32 最后的链结失败: 错误的值)

错误提示如下:

[ 41%] Linking CXX shared library libopenpose.so
/usr/bin/ld: CMakeFiles/openpose.dir/3d/cameraParameterReader.cpp.o: relocation R_X86_64_PC32 against symbol `_ZTVN2op21CameraParameterReaderE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: 错误的值
collect2: error: ld returned 1 exit status
src/openpose/CMakeFiles/openpose.dir/build.make:6841: recipe for target 'src/openpose/libopenpose.so.1.4.0' failed
make[2]: *** [src/openpose/libopenpose.so.1.4.0] Error 1
CMakeFiles/Makefile2:219: recipe for target 'src/openpose/CMakeFiles/openpose.dir/all' failed
make[1]: *** [src/openpose/CMakeFiles/openpose.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

这是一个编译器发出的错误,提示里面说在链接动态链接库libopenpose.so的时候,R_X86_64_PC32和某个symbol发生冲突,解决方法为编译时加上-fPIC参数重新编译。

具体解决方法:

打开openpose目录下的CMakeLists.txt文件

在第107行下面添加语句

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fpic")

elseif (UNIX)
  # Turn on C++11
  add_definitions(-std=c++11)
  set(CMAKE_CXX_FLAGS_RELEASE "-O3")     //在这行下面
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fpic")
elseif (APPLE)

 

然后在119行左右的下面添加语句

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")

if (CMAKE_COMPILER_IS_GNUCXX)
  message(STATUS "GCC detected, adding compile flags")
  # set(OP_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -Wpedantic -Wall -Wextra -Wfatal-errors")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")    //在这行下面
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
  set(OP_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpedantic -Wall -Wextra -Wfatal-errors")
  # set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Wpedantic -Wall -Wextra -Wfatal-errors")
endif (CMAKE_COMPILER_IS_GNUCXX)

最后重新在cmake中configure和generate一下,再次make,错误消失。

你可能感兴趣的:(编译openpose出现链接错误(cameraParameterReader.cpp.o R_X86_64_PC32 最后的链结失败: 错误的值))