在Ubuntu 11.10上编译OpenCV2.3.1时出现奇怪的链接器错误

时间:2011-12-03 18:46:01

标签: opencv compilation linker compiler-errors

我正在尝试按照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

3 个答案:

答案 0 :(得分:6)

问题是您尝试将libopencv_highgui.solibavcodec.a关联起来。后者是根据没有-fPIC编译的代码构建的(这很常见),而且这些代码无法链接到x86_64上的共享库。

您的选择是:

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

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

如果你做第二个,你仍然需要安排libopencv_highgui.so需要libavcodec在运行时可用的符号。您可以通过将主要可执行文件与libavcodec(归档或共享变体)链接来实现此目的。

答案 1 :(得分:4)

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

我曾经有过类似的问题,上面已经解决了这个问题

答案 2 :(得分:2)

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