項目需要在服務器上帶ffmpeg編譯opencv 3.1,之前只在windows上用過opencv,編譯過一次痛苦的很,所以這次做好了充分心理准備。
編譯ffmpeg
1.首先去下載源碼,放在/ffmpeg目錄下
2.修改config,因為沒sudo權限,所以默認安裝路徑要改,編譯opencv要調用動態庫,所以要加shared項(很坑啊第一次沒加重新編的)
./configure--enable-shared--prefix=./install
3.make
然後又出錯,shared的鍋
這次通過,然後
make install
完成。
編譯opencv
1.下源碼
2.cd ./opencv/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=./install..
會顯示配置選項,ffmpeg一般默認是yes
3.make
出錯
/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: could not read symbols: Bad value
神坑啊,據說是opencv的bug,出在libavcodec.a連接動態庫的過程,在這給出3個解決方法(你就知道我在這卡了多久):(1)如上所述,編譯ffmpeg的時候加shared選項
(2)設置CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC",然而我試的時候並不好使
(3)把libavformat.a libavutil.a libavcodec.a libswscale.a從/usr/local/lib(就ffmpeg的庫目錄)刪掉,編譯完opencv再放回去
最後解決我問題的是(1)(3)
然後make&&make install
完成
只寫了關鍵的步驟詳細過程可參考
http://blog.csdn.net/jinatom/article/details/7982612
http://www.bkjia.com/Linuxjc/1156106.html TechArticle