如果在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