在线安装的话,很容易 然后,
编译的时候需要加上 `pkg-config opencv --libs --cflags opencv` 参数
一、交叉编译opencv构造:下载:各个库的下载可以直接搜名字到官网下载几个关键解释:“--prefix=” 后边跟make install时的位置,本例中,libz在make install时将安装到/usr/arm-linux-gnueabihf中“--host=” 后边跟arm-linux表明使用的是ARM环境有configure的才能进行configure配置4)所有的makefile修改类似Libz的交叉编译第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared第二步:修改makefile,主要有下边几个,修改的时候通篇参照即可CC=arm-linux-gnueabihf-gccAR=arm-linux-gnueabihf-ar rcRANLIB=arm-linux-gnueabihf-ranlibSTRIP = arm-linux-gnueabihf-strip如果有ARCH的话,ARCH=ARM第三步:#sudo make#sudo make installLibjpeg的交叉编译第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc第二步:参考1)中方法修改makefile第三步:#sudo make#sudo make installLibpng的交叉编译第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc第二步:参考1)中方法修改makefile第三步:#sudo make#sudo make installYasm的交叉编译第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static第二步:修改makefile第三步:#sudo make#sudo make installLibx264的交叉编译第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf第二步:修改config.mak里的参数,因为makefile要调用config.mak,所以修改方法同makefile第三步:#sudo make#sudo make installLibxvid的交叉编译第一步:首先切换目录 #cd build/generic第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly第三步:#sudo make#sudo make installffmpeg的交叉编译第一步:./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf第二步:修改makefile文件第三步:#sudo make#sudo make install第四步:将ffmpeg加入pkg-config执行#sudo gedit /etc/bash.bashrc,在末尾加入export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfigexport PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/完毕后使用命令:#source /etc/bash.bashrc或者单独使用三个export,不过寿命只在一个终端中,终端关闭时就失效。几个关键解释:--extra-flags指向xvid的安装路径,--extra-ldflags指向x264的路径安装cmake-gui执行:#sudo apt-get install cmake-qt-guiOpencv的交叉编译第一步:修改opencv/platflrms/linux/目录下的arm-gnueabi.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++ )第二步:在opencv目录下新建build目录,进入build目录,执行命令:#cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../这时,要保证出现:第三步:使用cmake-gui打开CMakeCache.txt,去掉所有的无关项,修改CMAKE_INSTALL_PREFIX,来确定make install的目录第四步:#sudo make#sudo make install可能出现的错误:opencv编译不通过,出现skip之类的,说明ffmpeg没编译好,或者其编译好了,但是pkg-config没有设置好,一定要设置好其环境前边几步不通过的话,看看命令有没有少,或者有没有修改好makefile在arm上使用时,一种方法时直接将编译好的opencv目录下的lib文件拷贝到开发板对应的/lib目录下,其他或者拷贝到自己指定的目录,并设置好环境变量即可使用ubuntu intrepid + arm-linux-gcc(2.95.3)所使用的交叉编译器,似乎与编译器对 stl 的支持程序有关。
目前可知的是,openmoko 提供的编译器编译1.0.0及1.1.0均有问题。
1、编译opencv-1.0.0
$ cd opencv-1.0.0
$ mkdir buildcd build//这样处理是比较干净,也方便。
2.95.3对opencv-1.0.0正常,暂未发现问题。编译opencv-1.1.0则存在问题。
另,ELDK-4.2已经安装好,其支持都很是完整。另行测试。
1)配置(共享库及静态链接)
//共享库
$ ../configure --host=arm-linux --prefix=/home/goosen/visions/install --without-gtk --without-v4l --disable-apps
//静态编译
$ ../configure --host=arm-linux --prefix=/home/goosen/visions/install --without-gtk --without-v4l --disable-apps --enable-static --disable-shared
此处若配置target=arm-linux,并没有检测交叉编译器。因此选择配置--host=arm-linux-gcc 。
静态编译opencv成功,只是编译应用程序则出现大量的’undefined reference‘。
对于ffmpeg, v4l及gtk的支持。需要整理文档(基本步骤,碰到的问题及初步分析)。
2)编译(安装于~/visions/install/)
$ makemake install
$ ls ~/visions/install/ //opencv 安装于 --prefix所配置目录下
include lib share
2、设置环境变量及编译sample(c 源码)
1)编译例程
//opencv共享库,均正常。
//暂时无法实际测试,所使用的9200板子,未有LCD,另gtk未支持。
$ sh build_all.sh
$ file drawing
drawing: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
//编译 drawing.c(静态链接opencv)
$ arm-linux-g++ drawing.c -o drawing `pkg-config --cflags --libs opencv`
/home/goosen/visions/install/lib/libcxcore.a(cxerror.o):???'__static_initialization_and_destruction_0'?:
cxerror.o(.text+0x518): undefined reference to `pthread_key_create'
collect2: ld returned 1 exit status
修改/home/goosen/visions/install/lib/pkgconfig 下opencv.pc, 加编译参数 -lpthread
2)设置及修改。设置 PKG_CONFIG_PATH
$ export PKG_CONFIG_PATH=/home/goosen/visions/install/lib/pkgconfig
$ cd opencv-1.0.0/samples/c
修改build_all.sh
gcc -> arm-linux-gcc
g++ -> arm-linux-g++
//eldk的很好很强大,寻找时间进行进一步测试。
另,需要对ppp协议中的LCP协商部分,做更为深入的了解。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)