1. 程式人生 > >ubuntu opencv 編譯失敗 relocation R_X86_64_32 against `.rodata.str1.1'

ubuntu opencv 編譯失敗 relocation R_X86_64_32 against `.rodata.str1.1'

ubuntu14.04安裝配置FFmpeg+opencv-3.1.0+python 呼叫opencv模組

這次因為寫python時候要調opencv的函式,在ubuntu14.04安裝了opencv,中間出現一個安裝錯誤:

/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

導致大半夜時間都在解決(編譯時間太長了),這個是FFmpeg軟體安裝和配置失敗造成的,具體原因在配置時候未設定成正確的共享引數(編譯生成動態連結庫需要引數共享)

安裝編譯配置FFmpeg

step1:依賴項

安裝FFmpeg的依賴項:yasm,libx264(依賴yasm),libfaac,libmp3lame,libtheora,libvorbis,libxvid,libxext,libxfixes.命令如下: 安裝yasm

apt-get install yasm 
  • 1

安裝libx264

aptitude install libx264-dev 
  • 1

安裝其餘軟體

sudo aptitude install libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev  libxext-dev libxfixes-dev
  • 1

step2:下載編譯配置

下載FFmpeg:官網網址,解壓,進入到解壓的目錄編譯很重要,這個配置錯了會導致上面提到編譯opencv時的錯誤

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis  --enable-nonfree --enable-pic --enable-shared
  • 1

後面的–enable-nonfree –enable-pic –enable-shared很重要) 使用prefix指定安裝路徑,則需要/ect/profile配置檔案修改對應的路徑配置,讓系統正確找到FFmpeg的安裝路徑:(簡單的安裝方法是不指定安裝路徑,就不用配置相關路徑,如果一直有錯誤,可以嘗試不指定安裝路徑來安裝,但這樣或許對之後刪除管理較為麻煩)

vi /etc/profile
  • 1

在檔案末尾加上兩句話:

export FFMPEG_HOME=/usr/local/ffmpeg 
export PATH=$FFMPEG_HOME/bin:$PATH
  • 1
  • 2

使生效

source profile
  • 1

step3:安裝

make
make install
  • 1
  • 2

安裝之後在/usr/local/ffmpeg會看到有三個目錄:bin 執行檔案目錄,lib 靜態,動態連結庫目錄,include 程式設計用到的標頭檔案

step4:檢查安裝和配置是否正確

ffmpeg -version 
  • 1

出現如下指令表示安裝正確(configuration的配置一定要一致):

configuration: --enable-nonfree --enable-pic --enable-shared
libavutil      55. 28.100 / 55. 28.100
libavcodec     57. 48.101 / 57. 48.101
libavformat    57. 41.100 / 57. 41.100
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 47.100 /  6. 47.100
libswscale      4.  1.100 /  4.  1.100
libswresample   2.  1.100 /  2.  1.100
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意: 1:為了防止執行程式找不到庫檔案,可以將/usr/local/ffmpeg/lib目錄設定到LD_LIBRARY_PATH環境變數 2:若出現error while loading shared libraries: libavdevice.so.52的錯誤修改/etc/ld.so.conf 在最後一行加上/usr/local/ffmpeg/libldconfig -v,並修改 /usr/local/ffmpeg/lib目錄下的檔案許可權為777 3:在ubuntu 上安裝ffmpeg後,如果你命令ffmpeg不管用,把編譯後文件中/usr/local/ffmpeg/bin/ffmpeg檔案複製到/usr/ bin當中

安裝Opencv

step1:下載:官網,解壓到opencv

step2:安裝依賴項

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils 
  • 1

ffmpeg已經安裝過,無需再裝

step3:建立編譯目錄,編譯

cd ~/opencv
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

編譯過程時間較長

step4:測試,參考文獻[5].

#python呼叫opencv模組

step1:安裝python-opencv,numpy

sudo apt-get install python-opencv
sudo apt-get install python-numpy
  • 1
  • 2

step2:測試呼叫

python
import cv
  • 1
  • 2

如果不報錯,說明成功呼叫.

--------------------- 本文來自 流星逐月 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/u010106759/article/details/51931815?utm_source=copy