问题描述
我试图在Ubuntu 11.10上按照中的说明编译OpenCV版本2.3.1。我收到以下错误。不能理解发生了什么... /usr/local/lib/libavcodec.a
存在,但链接器无法链接到它,或其他?
错误:
[20%]内置目标pch_Generate_opencv_highgui
链接CXX共享库../../lib/libopencv_highgui.so
/ usr / bin / ld:/usr/local/lib/libavcodec.a(avpacket.o):重定位R_X86_64_32S针对`av_destruct_packet'
在创建共享对象时不能使用;重新编译-fPIC
/usr/local/lib/libavcodec.a:无法读取符号:错误值
collect2:ld返回1退出状态
问题是你试图链接 libopencv_highgui.so
与 libavcodec.a
。后者是从没有 -fPIC
(这是很常见)编译的代码构建的,并且这样的代码不能链接到共享库上 x86_64
。
您的选择是:
- 获得
libavcodec.so
并安排链接到它 - 删除
libavcodec
code> -lavcodec 。
只需安装包。
libopencv_highgui.so 需要
libavcodec
到在运行时可用。您可以通过将主可执行文件与 libavcodec
(归档或共享变体)链接来实现。 I'm trying to compile OpenCV version 2.3.1 on an Ubuntu 11.10 following instructions described here. I'm getting following error. Can't understand what is happening... /usr/local/lib/libavcodec.a
exists but linker can't link against it, or something else?
error:
[ 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
The problem is that you are attempting to link libopencv_highgui.so
with libavcodec.a
. The latter is built from code compiled without -fPIC
(which is quite usual), and such code can not be linked into shared libraries on x86_64
.
Your choices are:
- Obtain
libavcodec.so
and arrange to link against it, or - Remove
libavcodec
or-lavcodec
from the link line completely.
For the first, you most likely just need to install libavcodec-dev package.
If you do the second, you will still have to arrange for symbols that libopencv_highgui.so
needs from libavcodec
to be available at runtime. You can achieve that by linking the main executable with libavcodec
(either archive or shared variant).
这篇关于在Ubuntu 11.10上编译OpenCV2.3.1时,出现链接器错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!