我在Ubuntu 13.10上安装了一些OpenCV安装,看起来有点不高兴。我已经完成了几个版本并安装了方法,当我去了#34; make"或" make -j4"制造卡车直到
/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
感谢任何帮助。 再次感谢罗伯特。
答案 0 :(得分:19)
在启用了FFMPEG的Ubuntu 14.04上编译opencv3 alpha时遇到了同样的问题。
我的FFMPEG是编译的git版本
./configure
make
make install
我不得不重新编译FFMPEG
./configure --enable-nonfree --enable-pic --enable-shared
这对我来说很有把戏,然后opencv3编译好了。
答案 1 :(得分:2)
将/usr/local/lib/libavcodec.a
链接到lib/libopencv_videoio.so.3.0.0
时,OpenCV找不到合适的ffmpeg库。
应提供libavcodec.so
,但opencv只能找到libavcodec.a
。
为什么?有一些可能性:
1)旧/新ffmpeg
/usr/local/lib
和/usr/local/bin
中安装了一个只有静态库的旧ffmpeg。
安装了具有共享库和自定义安装路径的新ffmpeg,但系统不知道这一点。
您必须关注http://code.opencv.org/issues/1077。
2)没有共享的ffmpeg
你应该像其他人说的那样用共享库安装ffmpeg。
3)新的ffmpeg没有“正确”安装
如果新的ffmpeg是由源代码和自定义路径构建的,则路径应该是绝对路径。 例如:
/configure --prefix="$HOME/lib/ffmpeg_build"
如果设置了相对路径,则相对路径将安装到ffmpeg设置文件中,而opencv将根据该文件找不到正确的库。
您可能希望查看opencv源目录中的CMakeCache
文件,它会记录构建时需要的库路径。
答案 2 :(得分:1)
我正在寻找一种正确构建OpenCV 2.4.11的方法,并且这样做了。但是,正确的共享参数是--enable-shared,因此命令行是
./ configure --enable-nonfree --enable-pic --enable-shared
感谢您的帖子!