如果在Ubuntu 14.04.3 LTS上编译,openCV的当前稳定(V3.0.0)和不稳定(V3.1.0)版本混合共享和非共享库。opencv V3混合共享和非共享
Linking CXX shared library ../../lib/libopencv_videoio.so
/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.1.0] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2
力图打造libopencv_videoio.so
使用libavcodec.a
似乎是问题。这里有一个bug report,但它只是给出建议来检查是否安装了libavcodec.so
(这是)以及使用-DBUILD_SHARED_LIBS=OFF
来防止创建共享库的解决方法。有谁知道这个问题的原因。 openCV人员只是声明Ubuntu打包的ffmpeg库不正确。任何想法?
这个问题似乎很古老。我刚刚发现一个非常复杂的similar question,但没有回复,但用./configure --enable-shared
编译ffmpeg的建议发表了评论。但是已经有一个共享库/usr/lib/x86_64-linux-gnu/libavcodec.so
显然没有找到。我不是cmake
专家,但不能成为一个错过引导构建过程的问题吗?
那么,Ubuntu的ffmpeg软件包并不是真正的ffmpeg软件包,而是伪造的libavcodec库。这是一个分叉。除此之外,您可以编辑CMakeCache.txt文件并将'/ usr/lib/x86_64-linux-gnu/libavcodec.so'添加到'FFMPEG_LIBRARIES'或一个类似命名的变量。 – usr1234567
我认为OpenCV 3.1比OpenCV 3.0更稳定 – sturkmen
是的,它只是一个没有质量声明的正式命名。但官方稳定性不会低于3.0。我主要使用3.1,没有问题,也没有在3.0中。 – Kellerspeicher