1. 程式人生 > >交叉編譯帶ffmpeg的opencv到zynq中

交叉編譯帶ffmpeg的opencv到zynq中

前面一部分涉及轉載     轉載人是:qiankun2793        

1.2其他依賴庫安裝

1.2.1libjpeg交叉編譯

這個以後面的依賴庫編譯和安裝都需要首先進行配置

tar -xzvf jpegsrc.v9.tar.gz
cd jpeg-9
./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc --prefix=<dependency install path>
make
make install

可以在配置的時候指定將編譯好的庫安裝的位置

,或者使用”sudomake install”直接安裝在”/usr/local/lib”裡,以下安裝方式類似。 
可以切換到安裝的資料夾下檢視是否交叉編譯成功

file libjpeg.so.9.0.0

如果輸出資訊為

libjpeg.so.9.0.0: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, not stripped1

說明交叉編譯成功

1.2.2zlib交叉編譯

zlib需要預先指定CC選項

export CC=arm-linux-gnueabihf-gcc
./configure 
--shared --prefix=<dependency install path>
make make install

1.2.3libpng交叉編譯

因為libpng交叉編譯需要用到zlib,所以需要在編譯該庫之前交叉編譯好zlib

export LDFLAGS="-L<zlib install path>/lib"
export CPPFLAGS="-I<zlib install path>/inclue"
./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc --prefix=<dependency install path
>

在編譯之前,需要指定zlib的庫的安裝路徑和標頭檔案位置,如果是用管理員許可權安裝的上述路徑分別為

export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS="-I/usr/local/include"

///////////////////////////////////////////////////

1.2.4x264交叉編譯

tar -xvf x264-snapshot-20161019-2245-stable.tar
cd x264-snapshot-20161019-2245-stable/
./configure --host=arm-xilinx-linux --cross-prefix=arm-xilinx-linux-gnueabi- --disable-asm --enable-shared --prefix=<dependency install path>
make
make install

1.2.5xvidcore交叉編譯

xvidcore的配置檔案在/build/generic

cd build/generic
./configure --host=arm-xilinx-linux-gnueabi --disable-assembly --enable-shared --prefix=<dependency install path>
make
make install1234

////////////////////////////////////////這兩個可以不編譯。

1.3FFmpeg 交叉編譯

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-shared --disable-static --cross-prefix=arm-xilinx-linux-gnueabi- 
--arch=arm --target-os=linux --disable-stripping --enable-cross-compile --disable-asm 
/////////////--enable-libxvid --enable-libx264 
/////前面兩個沒編譯就沒有這個選項///- -enable-gpl --extra-cflags=-I<dependency install path>/include --extra-ldflags=-L<dependency install path>/lib //可不用--prefix=<dependency install path>makemake install

1.4OpenCV 交叉編譯

首先寫一個toolchain.cmake檔案,將下面內容複製進去

set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )
set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )
set( CMAKE_FIND_ROOT_PATH "/home/lenovo01/project-code/cc-lib/dependency-lib/" )
set( CMAKE_C_FLAGS "-Wl,-rpath-link=/home/lenovo01/project-code/cc-lib/dependency-lib/")
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

上面的CMAKE_FIND_ROOT_PATHCMAKE_C_FLAGS裡的路徑要修改為前面那些依賴和FFmpeg的安裝路徑 
解壓OpenCV原始碼,並生成Makefile檔案

mkdir build
cd build
   cmake -D CMAKE_TOOLCHAIN_FILE=../toolchain.cmake -D BUILD_opencv_nonfree=OFF ../opencv-2.4.1

如果系統內沒有安裝cmake需要先安裝和下面用到的cmake圖形工具

sudo apt-get install cmake cmake-curses-gui

然後配置OpenCV的編譯選項

ccmake .

會出現如下的配置介面, 

使用上下方向鍵可以翻頁,至少以下幾個選項為ON

  • WITH_FFMPEG

  • WITH_JPEG

  • WITH_PNG

  • WITH_V4L



注意:由於出錯選擇的時候有去掉了with1934 with gtk

按’c’然後按’g’來生成Makefile 
然後執行

一直找不到ffmpeg庫的解決辦法:

1、新增環境變數:sudo/etc/bash.bashrc

新增

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/lenovo01/project-code/cc- lib/dependency-lib/lib/pkgconfig

exportPKG_CONFIG_PATH

exportLDFLAGS=-Wl,-rpath-link,/home/lenovo01/project-code/cc-lib/dependency-lib/lib

路徑是交叉編譯的依賴庫的路徑,依賴庫包括 libjpeg libpng libz ffmpeg。均放在一個目錄下,要注意lib目錄下的pkgconfig一定要全部弄進來。

2、然後按正常步驟cmake就可以了。




也可以用強制解決辦法:

1、把交叉編譯的ffmpeg庫檔案全部拷貝到/usr/local/lib下 同時要拷貝pgkconfig檔案。

2、按正常步驟cmake就可以了。



交叉編譯庫太噁心了 簡直要編到吐了!!!!!!