交叉編譯帶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
可以在配置的時候指定將編譯好的庫安裝的位置
可以切換到安裝的資料夾下檢視是否交叉編譯成功
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 install
1234
////////////////////////////////////////這兩個可以不編譯。
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>
make
make 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_PATH和CMAKE_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就可以了。
交叉編譯庫太噁心了 簡直要編到吐了!!!!!!