【问题标题】:Strange linker error while compiling OpenCV2.3.1 on Ubuntu 11.10在 Ubuntu 11.10 上编译 OpenCV2.3.1 时出现奇怪的链接器错误
【发布时间】:2012-01-12 06:59:11
【问题描述】:

我正在尝试按照here 中描述的说明在 Ubuntu 11.10 上编译 OpenCV 版本 2.3.1。我收到以下错误。无法理解发生了什么.../usr/local/lib/libavcodec.a 存在,但链接器无法链接到它,或者其他什么?

错误:

[ 20%] Built target pch_Generate_opencv_highgui
Linking CXX shared library ../../lib/libopencv_highgui.so
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet' 
can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

【问题讨论】:

  • 您是否尝试过按照错误提示使用 -fPIC 进行编译?
  • 编译什么? OpenCV 本身?
  • @RCE 如何将 -fPIC 标志添加到编译器/链接器?我应该编辑 MakeFile 吗?

标签: opencv compilation linker compiler-errors


【解决方案1】:

问题是您试图将libopencv_highgui.solibavcodec.a 链接。后者是由没有-fPIC 编译的代码构建的(这很常见),并且此类代码无法链接到x86_64 上的共享库。

您的选择是:

  • 获取libavcodec.so 并安排链接,或者
  • 从链接行中完全删除libavcodec-lavcodec

首先,您很可能只需要安装libavcodec-dev 包。

如果您执行第二个操作,您仍然必须安排 libopencv_highgui.so 需要的符号来自 libavcodec,以便在运行时可用。您可以通过将主可执行文件与libavcodec(存档或共享变体)链接来实现这一点。

【讨论】:

  • 我在 x264 和 ffmpeg 中都添加了 --enable-pic 选项。得到同样的错误。然后删除了 libhighgui 和 libcv(从 ubuntu 存储库安装)并安装了 libavc-1394-22-dev。再次编译OpenCV,它工作正常!谢谢
  • 你是如何删除 libhighgui 和 libcv 的?您能否也发送指向 libavc-1394-22-dev 的链接
【解决方案2】:

我的看法是,首先运行 sudo apt-get remove libavcodec ,然后使用 sudo apt-get install libopencv-dev 重新安装

我曾经遇到过类似的问题,上面解决了它

【讨论】:

    【解决方案3】:

    运行 64 位版本的 Ubuntu,您必须配置和构建 ffmpeg ./configure --enable-shared --enable-pic 如步骤 7b 和 8b 中所述

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多