我正在尝试按照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
答案 0 :(得分:6)
问题是您尝试将libopencv_highgui.so
与libavcodec.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中所述