You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 23.10编译OpenCV 4.8遇R_X86_64_PC32链接错误求解决

问题分析与解决方法

问题根源

链接错误的核心原因是你本地编译安装的gflags静态库未使用-fPIC参数编译,而OpenCV构建共享库(.so文件)时,要求链接的依赖库必须支持位置无关代码(PIC),否则会触发 relocation 错误。


具体解决步骤

1. 重新编译安装gflags(推荐方案)

卸载现有不符合要求的gflags,重新编译时强制添加-fPIC参数:

  • 先清理已安装的gflags文件:
    sudo rm -rf /usr/local/lib/libgflags* /usr/local/include/gflags /usr/local/lib/cmake/gflags*
    
  • 下载gflags源码(或使用你已有的源码包):
    git clone https://github.com/gflags/gflags.git
    cd gflags && mkdir build && cd build
    
  • 用cmake配置编译参数,强制启用-fPIC:
    cmake -DCMAKE_CXX_FLAGS="-fPIC" -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ..
    
    注:如果需要动态库,可将BUILD_SHARED_LIBS=OFF改为ON,动态库默认会自动启用-fPIC
  • 编译并安装:
    make -j$(nproc)
    sudo make install
    
  • 回到OpenCV的build目录,清空原有构建文件后重新执行cmake和make:
    cd ~/builddir-opencv
    rm -rf *
    cmake CXXFLAGS="$CXXFLAGS -fPIC" -DOPENCV_FORCE_VTK=TRUE -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules ../opencv-4.x
    make -j$(nproc)
    

2. 禁用OpenCV对gflags的依赖(快速方案)

如果你的场景不需要用到依赖gflags的模块(比如sfm),可直接在cmake配置时禁用gflags:

cd ~/builddir-opencv
rm -rf *
cmake CXXFLAGS="$CXXFLAGS -fPIC" -DOPENCV_FORCE_VTK=TRUE -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules -DWITH_GFLAGS=OFF ../opencv-4.x
make -j$(nproc)

3. 强制OpenCV编译静态库(备选方案)

若你只需要OpenCV的静态库,也可避开共享库的链接限制,cmake时添加参数:

cd ~/builddir-opencv
rm -rf *
cmake CXXFLAGS="$CXXFLAGS -fPIC" -DOPENCV_FORCE_VTK=TRUE -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules -DBUILD_SHARED_LIBS=OFF ../opencv-4.x
make -j$(nproc)

内容的提问来源于stack exchange,提问作者Raphael10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:09:50