当前位置: 首页 > news >正文

ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决

在一个只有ubuntu20.04的docker环境中配置opencv4.0.0,
什么库都没有,都要重新安装,
其他的问题在网上都找到了解决方案,唯独这个问题比较棘手:
[ 86%] Linking CXX executable …/…/bin/opencv_annotation
/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
make[2]: [modules/sfm/CMakeFiles/opencv_sfm.dir/build.make:243: lib/libopencv_sfm.so.4.0.0] Error 1
make[1]: [CMakeFiles/Makefile2:12239: modules/sfm/CMakeFiles/opencv_sfm.dir/all] Error 2

我看出是编译libopencv_sfm.so时出的问题,也看出需要用-fPIC重新编译gflags

# 1. 首先清理之前的安装
sudo apt remove libgflags-dev
cd ~/gflags
rm -rf buildcmake -DCMAKE_BUILD_TYPE=Release \-DBUILD_SHARED_LIBS=ON \-DCMAKE_CXX_FLAGS="-fPIC" \-DCMAKE_C_FLAGS="-fPIC" \-DCMAKE_INSTALL_PREFIX=/usr/local \..# 3. 编译和安装
make -j$(nproc)
sudo make install
sudo ldconfig

编译好之后再重新build opencv,
注意我是在root权限下,不是root的前面都加上sudo

cd ~/opencv/build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.0.0 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.0.0/modules -D BLAS_LIBRARIES=/usr/lib/x86_64-linux-gnu/libblas.so -D LAPACK_LIBRARIES=/usr/lib/x86_64-linux-gnu/liblapack.so ..make -j8
make install
#更新系统的动态链接库缓存
ldconfigsudo nano ~/.bashrc# 在文件末尾添加以下内容
# 根据自己的安装路径来,我是cmake时指定了安装在/usr/local/opencv4.0.0
export OpenCV_DIR=/usr/local/opencv4.0.0
export PATH=$PATH:$OpenCV_DIR/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OpenCV_DIR/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$OpenCV_DIR/lib/pkgconfig
export CPATH=$CPATH:$OpenCV_DIR/include/opencv4# 保存并退出(在nano中按Ctrl+X,然后按Y确认,最后按Enter)
#用vi也行# 使环境变量生效
source ~/.bashrc

为了确保pkg-config能正确找到OpenCV,还需要创建或修改pkg-config文件:

# 如果pkg-config文件夹不存在,创建它
sudo mkdir -p /usr/local/opencv4.0.0/lib/pkgconfig# 创建opencv4.pc文件
sudo nano /usr/local/opencv4.0.0/lib/pkgconfig/opencv4.pc#添加以下内容
prefix=/usr/local/opencv4.0.0
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${prefix}/libName: OpenCV
Description: Open Source Computer Vision Library
Version: 4.0.0
Cflags: -I${includedir}
Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_flann

最后验证安装:

# 检查环境变量是否设置成功
echo $LD_LIBRARY_PATH
echo $PKG_CONFIG_PATH# 检查OpenCV是否能被找到
pkg-config --modversion opencv4
http://www.lryc.cn/news/466555.html

相关文章:

  • android openGL ES详解——混合
  • 计网--物理层
  • 算法的学习笔记—数组中的逆序对(牛客JZ51)
  • Golang | Leetcode Golang题解之第498题对角线遍历
  • 什么是全局污染?怎么避免全局污染?
  • C# 串口通信教程
  • PHP编程基础
  • TwinCAT3下位机配置EAP通讯传递与接收变量
  • 近似推断 - 期望最大化(EM)篇
  • arp欺骗及其实验
  • HDU The Boss on Mars(容斥原理)
  • nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理
  • Java中的数据结构与集合源码
  • Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端
  • Deepin V23 / 统信UOS 下安装与配置 tftp
  • java基础学习:定时任务常见实现方式
  • 句柄是什么?有什么用?举例说明
  • Jenkins学习笔记
  • AI 解读软考高级操作系统顺序存取、直接存取、随机存取、相联存取的区别
  • STM32烧写准备
  • 为Windows Terminal 配置zsh + Oh-My-Zsh!
  • RNN、LSTM 与 Bi-LSTM
  • 第一性原理
  • DOM NamedNodeMap 接口详解
  • EasyExcel自定义下拉注解的三种实现方式
  • Burp Suite Professional 2024.9 for macOS x64 ARM64 - 领先的 Web 渗透测试软件
  • 使用Mock库进行依赖注入的实用指南
  • nosql课本习题
  • springboot 3.2.5集成spring security 只放行get请求,其他请求403
  • 【linux】麒麟v10安装ELKB(ARM架构)