OpenCV make失败-“;使用-fPIC“重新编译”;
我在Ubuntu13.10上安装了一个小OpenCV,看起来有些不高兴。我已经通过了一些版本和安装方法,当我去“make”或“make-j4”的时候,make卡车一直到OpenCV make失败-“;使用-fPIC“重新编译”;,opencv,ubuntu,Opencv,Ubuntu,我在Ubuntu13.10上安装了一个小OpenCV,看起来有些不高兴。我已经通过了一些版本和安装方法,当我去“make”或“make-j4”的时候,make卡车一直到 /usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fP
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [lib/libopencv_videoio.so.3.0.0] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2
感谢您的帮助。
再次感谢你,罗伯特。在启用FFMPEG的Ubuntu 14.04上编译opencv3 alpha时,我遇到了同样的问题。 我的FFMPEG是用
/配置
制作
安装
我不得不重新编译FFMPEG
./configure--启用非自由--启用pic--启用共享
这对我来说很有用,在那之后opencv3编译得很好。我正在寻找一种正确构建OpenCV 2.4.11的方法,这就成功了。但是,正确的共享参数是--enable shared,因此命令行是 ./configure--enable nonfree--enable pic--enable shared
谢谢你的帖子 OpenCV在将
/usr/local/lib/libavcodec.a
链接到lib/libopencv\u videoio.so.3.0
时未找到正确的ffmpeg库
因此应该提供libavcodec.A
,但opencv只能找到libavcodec.A
。
为什么?有一些可能性:
1) 旧/新ffmpeg
只有静态库的旧ffmpeg安装在/usr/local/lib
和/usr/local/bin
中。
安装了具有共享库和自定义安装路径的新ffmpeg,但系统不知道这一点。
你必须跟着
2) 没有共享的ffmpeg
正如其他人所说,您应该使用共享库安装ffmpeg
3) 新ffmpeg未“正确”安装
如果新的ffmpeg是由源代码构建的,并且位于自定义路径中,则该路径应为绝对路径。
例如:
/configure --prefix="$HOME/lib/ffmpeg_build"
如果设置了相对路径,相对路径将安装到ffmpeg设置文件中,opencv将无法根据该文件找到正确的LIB。
您可能想查看opencv源代码目录中的
cmakcache
文件,它记录构建中需要的libs路径。也有同样的问题。我删除了ffmpeg(它删除了libavcodec.a),然后又重新编译和安装了它……但在最近的活动之后,我遇到了同样的问题。我检查了一下,发现你可以帮我一个忙,接受我的答案:)即使是几年前……啊,谢谢你打电话给我。你需要为你用eg x264编译FFmpeg的所有内容添加--enable_shared。@Robert Talamantez为什么你还没有将这个答案标记为正确?它对我起了作用。--enable pic
也必须设置为--enable shared
,否则它无法编译。我没有FFmpeg,但我从源代码构建了libav
,但没有--enable pic
选项,在制作opencv时出现了相同的错误。我需要在libav
包中make clean
,然后/configure--enable nonfree--enable pic--enable shared
来创建/usr/local/lib/libav*.so
链接文件。