c++ 生成共享对象时,无法使用针对符号“stderr@@GLIBC_2.2.5”的重定位R_X86_64_PC32;使用-fPIC重新编译

4sup72z8  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(232)

下面的指示在这里找到:https://docs.opencv.org/4.8.0/db/d05/tutorial_config_reference.html我正在尝试在Ubuntu 23.10中编译、构建和安装OpenCV 4.8
我整理了一下:

raphy@raohy:~/builddir-opencv$ cmake CXXFLAGS="$CXXFLAGS -fPIC" 
-DOPENCV_FORCE_VTK=TRUE -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-
4.x/modules ../opencv-4.x

字符串
没有任何错误
但是,在建筑阶段,我得到这样的错误:

[ 94%] Linking CXX shared library ../../lib/libopencv_sfm.so
/usr/bin/ld: /usr/local/lib/libgflags.a(gflags_completions.cc.o): warning: relocation against `_ZN3fLS25FLAGS_tab_completion_wordB5cxx11E' in read-only section `.text.startup'
/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
gmake[2]: *** [modules/sfm/CMakeFiles/opencv_sfm.dir/build.make:242: lib/libopencv_sfm.so.4.9.0] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:7756: modules/sfm/CMakeFiles/opencv_sfm.dir/all] Error 2


如何让它发挥作用?

lzfw57am

lzfw57am1#

我解决了这个问题,感谢这个github的讨论建议:
https://github.com/google/glog/issues/680#issuecomment-1270588709
我首先编译并构建了gflags库(https://github.com/gflags/gflags),并带有-DBUILD_SHARED_LIBS=ON标志:cmake -DBUILD_SHARED_LIBS=ON -B build。然后编译并构建了glogs库(https://github.com/google/glog)。opencv-4.x库的构建阶段进行得很顺利,很好

相关问题