歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> CentOS 7.1 編譯opencv3.1+ffmpeg

CentOS 7.1 編譯opencv3.1+ffmpeg

日期:2017/3/6 9:10:57   编辑:學習Linux

CentOS 7.1 編譯opencv3.1+ffmpeg


CentOS 7.1 編譯opencv3.1+ffmpeg


項目需要在服務器上帶ffmpeg編譯opencv 3.1,之前只在windows上用過opencv,編譯過一次痛苦的很,所以這次做好了充分心理准備。

編譯ffmpeg

1.首先去下載源碼,放在/ffmpeg目錄下

2.修改config,因為沒sudo權限,所以默認安裝路徑要改,編譯opencv要調用動態庫,所以要加shared項(很坑啊第一次沒加重新編的)

./configure--enable-shared--prefix=./install

3.make

然後又出錯,shared的鍋

  1. /usr/bin/ld:libavcodec/mqc.o:relocation R_X86_64_32 against `.rodata'cannotbe used when making a shared object;recompile with-fPIC
  2. libavcodec/mqc.o:erroradding symbols:Bad value
  3. collect2:error:ld returned 1exitstatus
解決方法是

  1. config.mak L75加入 -fPIC,重新編譯
  2. HOSTCFLAGS=-O3-g-std=c99-Wall-fPIC (順序可能不一樣)

這次通過,然後

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

Copyright © Linux教程網 All Rights Reserved