错误提示如下:
[ 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时遇到链接错误,提示R_X86_64_PC32重定位针对符号 '_ZTVN2op21CameraParameterReaderE' 不适用于动态对象。解决方法是在CMakeLists.txt中添加 '-fpic' 参数,重新编译。具体操作包括在特定行下添加设置CMAKE_CXX_FLAGS的语句,然后重新configure和generate。

1969

被折叠的 条评论
为什么被折叠?



