##編譯環(huán)境:
- **編譯:ubuntu16.04x86**
- **目標(biāo)機:cortex-a8 linux3.0**
- **編譯器:arm-linux-gcc**
前言:由于做項目的要求,我們需要將opencv移植到arm體系的開發(fā)板上,經(jīng)過我的測試,在開發(fā)板:**cortex-a8等都可以運行正常的【當(dāng)時我的開發(fā)板運行 的系統(tǒng)版本有l(wèi)inux3.0, linux2.6,測試都是正常的】**,整個過程耗時大概一周,我參考了網(wǎng)上很多的文章,在這里我總結(jié)一下。
## 使用文件清單

##編譯依賴庫
我相信,你在編譯庫的時候可能會遇到很多問題,我下面提供的編譯方法可能在你的機器上會報上一些錯誤,這很正常,把你的庫錯誤信息交給百度,bing,google去解決!我這里說的是主體思路。另外關(guān)于這些庫的用處,應(yīng)該在兩處起到作用:一,ubuntu編譯交叉編譯opencv2.0的時候用到;二,這些庫要在移植的時候移植到開發(fā)板的/lib文件夾【/lib 這是開發(fā)板的默認(rèn)庫搜索路徑,就是說你把庫丟在這個目錄就好了,不用設(shè)置什么搜索路徑了,省事?!浚唧w哪些移入,我待會說。最后,arm-linux-gcc這個交叉編譯器,你肯定要裝好吧,沒裝的百度裝去吧。好了,開始了。
1, libz 的交叉編譯:
./configure --prefix=$OPENCV_DEPEND –shared
修改 Makefile
CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
LDSHARED=arm-linux-gcc -shared-Wl,-soname,libz.so.1,--version-script,zlib.map
make
make install
2, libjpeg的交叉編譯:
./configure--host=arm-linux --prefix=$OPENCV_DEPEND --enable-shared --enable-static
make
makeinstall
3,? libpng 的交叉編譯:
./configure --host=arm-linux--prefix=$OPENCV_DEPEND --enable-shared --enable-static
make
makeinstall
4,? yasm 的交叉編譯:
CC=arm-linux-gcc ./configure--enable-shared --host=arm-linux --disable-asm --prefix=$OPENCV_DEPEND
make
makeinstall
5,? libx264 的交叉編譯:
CC=arm-linux-gcc ./configure--enable-shared --host=arm-linux --disable-asm --prefix=$OPENCV_DEPEND
make
makeinstall
6,? libxvid 的交叉編譯
cd build/generic
./configure --prefix=$OPENCV_DEPEND --host=arm-linux? --disable-assembly
make
makeinstall
7,? ffmpeg 的交叉編譯:
./configure --prefix=$OPENCV_DEPEND
--enable-shared --disable-static --enable-gpl
--enable-cross-compile? --arch=arm --disable-stripping
--target-os=linux --enable-libx264
--enable-libxvid--cc=arm-linux-gcc --enable-swscale
--extra-ldflags=-L$OPENCV_DEPEND/lib --extra-cflags=-I$OPENCV_DEPEND/include
make
makeinstall
【上面的代碼可能會因為排版問題出現(xiàn)一定問題】
如果你能正常的編譯以上的庫,那么最后你將可以編譯opencv2.0了
8.opencv2.0 交叉編譯:
進(jìn)入opencv2.0.0目錄:首先,修改configure文件:
gedit configure
搜索-lavcodec,定位到大概18182行的位置,在“FFMPEGLIBS="-lavcodec -lavformat” 后添加 “-lswscale”, 修改之后變?yōu)椋骸癋FMPEGLIBS="-lavcodec -lavformat -lswscale $FFMPEG_SWSCALE_LIBS"”,然后保存退出。
在終端中輸入:
./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --without-quicktime --without-1394libs --with-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/ LDFLAGS=-L/ usr/local /arm/4.3.2/arm-none-linux-gnueabi/lib --with-v4l --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi? CXXFLAGS=-O2
make
make install
【opencv-2.0.0移植算是成功了。接下來,需要把所有的庫燒寫到arm板子上去,如果燒寫到根目錄的lib目錄下,那么不用指定LD-LIBRARY-PATH,反之亦然?!?/p>
這個有個問題,你要移植的庫除了第八步之后產(chǎn)生lib文件下的庫文件【以.a結(jié)尾的,.la結(jié)尾的通通不要移動,這不是動態(tài)庫!移動的是后綴中有so這個字眼的,記住?!?,還要移動的是之前第1-7中的某些庫,為什么說某些庫,你需要啥就用啥唄!比如,你要用cvloadimage這個函數(shù)加載png 和? jpeg的圖片,那個你就把png還有jpeg相應(yīng)的庫也給復(fù)制到開發(fā)板的/lib文件夾下面。這點一定要注意,可怕的是個別開發(fā)板命名缺少庫它卻沒有任何提示,唯獨單單運行效果不對!如果遇到這個問題你要好好看看你的庫了。
**小插曲:在你把庫復(fù)制到開發(fā)板前,請事先到開發(fā)板看看時候有相應(yīng)的庫,這個相應(yīng)的庫可能是之前做的人留下的也可能其他原因,這不重要,重要的是這個遺留的東西可能對你的庫造成干擾,讓你百思不解,就是運行沒效果!**
##檢測程序
下面的程序就是我當(dāng)時的檢測程序,如果你能順利產(chǎn)生一個新的圖片,那么恭喜你成功了!
【**小插曲**:這個時候你不要用啥顯示窗口的函數(shù)等,你確定你的開發(fā)板有類似qt這類的圖形化工具!?我犯過這個錯誤,當(dāng)時顯示出錯了,我以為庫有問題,最后才知道如果想圖形化顯示還需要qt之類工具的支持。另外,我們一般也不需要在開發(fā)板里讓圖片顯示出來,想看就復(fù)制出來看唄】
#include<stdio.h>
#include<stdlib.h>
#include"cv.h"
#include"cxcore.h"
#include"highgui.h"
int main(int argc, char** argv )
{
IplImage* in;
printf("%d\n",argc);
printf("in:%d,the1:%s\n",in,argv[1]);
if((in = cvLoadImage(argv[1], 0)))
{
printf("load\n");
IplImage* out = cvCreateImage(
cvGetSize(in),
IPL_DEPTH_8U,
1
);
printf("created\n");
cvCanny(in, out, 20 , 60, 3);
printf("down\n");
cvSaveImage(argv[2], out, 0);
return 0;
}
else
{
printf("LoadImage failed!\n");
}
return -1;
}
```
在pc機上編譯此程序
arm-linux-gcc -I/usr/local/arm/4.4.1/arm-no-linux-gnueabi/include/opencv -I/usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/ -L/usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib? -lcv -lcxcore -lhighgui -lpng -lpng12 -ljpeg -lz opencvTest.c -o opencvTest
【上面的路徑你根據(jù)自己的情況改動一下】
將程序拷貝到開發(fā)板上,同時也拷貝一張圖片到開發(fā)板上
我的源圖片名為front.jpg 生成的圖片名為front2.jpg
執(zhí)行程序
./opencvTest front.jpg(原圖片路徑)? front2.jpe(生成圖片路徑)
如果有front2.jpg生成,那么恭喜你成功了!