opencv移植到arm详细过程
ARM-Linux环境下安装OpenCV
![ARM-Linux环境下安装OpenCV](https://img.taocdn.com/s3/m/1a5472f8f9c75fbfc77da26925c52cc58bd6900f.png)
1安装辅助软件 (2)1.1安装ARM-LINUX-G++ (2)1.2安装CMAKE-GUI (2)2安装OPENCV (2)2.1下载O PEN CV (2)2.2使用CMAKE编译源码 (2)2.2.1修改cmake的配置。
(4)2.2.2使用cmake生成Makefile文件 (6)3编译和安装 (6)3.1修改编译配置。
(6)3.2编译文件 (7)3.3安装O PEN CV (7)4配置OPENCV (8)4.1配置PKGCONFIG (8)4.2配置SHELL (8)5测试使用 (9)1安装辅助软件1.1安装arm-linux-g++下载arm-linux-gcc-4.3.2.tgz。
然后使用#tar -zxvf arm-linux-gcc-4.3.2.tgz -C / 命令解压。
可以看到其已经被解压到/usr/local/arm/4.3.2目录下了使用命令#vim /etc/bash.bashrc打开文件进行配置。
在最后一行输入下面一句export PATH=$PA TH:/usr/local/arm/4.3.2/bin保存并退出。
打开一个新终端或者在本终端输入#source /etc/bash.bashrc使得配置信息生效。
原理可以查看博文/luotuo44/article/details/89177641.2安装cmake-gui输入命令$cmake-gui后,会提示,尚未安装cmake-gui,即没有安装图形界面。
用其提示的命令安装即可。
安装过程需要联网。
2安装OpenCV2.1下载OpenCV到/projects/opencvlibrary/files/opencv-unix/下载安装opencv。
自己选一个版本。
我使用的是2.40。
下载完成后,把文件解压到/root/download目录下。
2.2使用cmake编译源码切换到root用户(要使用root权限运行cmake-gui)。
opencv的移植到arm开发板的步骤
![opencv的移植到arm开发板的步骤](https://img.taocdn.com/s3/m/a809c8d4c1c708a1284a4477.png)
Opencv移植到开发板的过程在移植opencv前,先要安装几个库:build-essential、manpages-dev、pkg-config、zlib、libpng、libjpeg、libz、libttf。
一、环境:系统:Ubuntu 9.10(内核2.6.31)目标板:sbc6045(系统:Qtopia,内核:2.6.30)交叉编译器:arm-none-linux-gnueabi-gcc二、准备:1、安装依赖库:sudo apt-get install build-essential manpages-dev pkg-config2、安装zlib库,这个是后面库的编译基础。
zlib-1.2.3.tar.gz在/root/opencv目录下# cd /root/opencv# tar -xvzf zlib-1.2.3.tar.gz由于zlib 库的configure 脚本不支持交叉编译选项,只好自己动用了,手动临时把gcc 修改成指向我们的交叉编译器arm-none-linux-gnueabi-gcc# cd /usr/bin# mv gcc gcc_back# ln -s /usr/local/arm/arm-2007q1/bin/arm-none-linux-gnueabi-gcc ./gcc修改完成后回到/root/opencv/zlib-1.2.3 目录下#./configure --prefix=/usr/local/arm/arm-2007q1/arm-none-linux-gnueabi --shared注意:这里配置指向/usr/local/arm/arm-2007q1/arm-none-linux-gnueabi目录,会自动安装在/usr/local/arm/arm-2007q1/arm-none-linux-gnueabi/ [include,lib] 目录下,千万不要装错目录了,不然后面会找不到这个库的# make# make install安装完后检查一下目录/usr/local/arm/arm-2007q1/arm-none-linux-gnueabi/ [include,lib] ,假如include 中没有zlib.h 之类的头文件,lib 中没有libz.so.1.2.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的*.h 都需要拷过去,在拷库的时候用cp –a libz.* /…./lib 就行,要用上–a 选项记着把刚才改过的gcc 再改回去,不然后面会出错的!!!!!(一定记得改)# cd /usr/bin# mv gcc_back gcc3、安装libpng库,这个是用来显示libpng图形的,MiniGUI里很多图都是libpng的,如果没有这个库,你的MiniGUI将无法正常工作,切记切记!libpng-1.2.18 .tar.gz在/root/opencv目录下# cd /root/opencv# tar -xvzf libpng-1.2.18 .tar.gz# cd libpng-1.2.18注意这边的配置:①使用交叉编译器②安装目录③—host 指定软将运行平台,不然终端也会提示说叫你使用—host 参数的。
UBUNTU OPENCV 环境搭建
![UBUNTU OPENCV 环境搭建](https://img.taocdn.com/s3/m/6ddfaa0055270722192ef7f7.png)
Opencv交叉编译到ARM(基于Qt)一、开发环境:环境:ubuntu10.04交叉编译工具:gcc version4.5.1(ctng-1.8.1-FA)友善的东西opencv版本:OpenCV-2.3.1a.tar.bz2(这里可以下载:/projects/opencvlibrary/files/)cmake:cmake version2.8.0()*:前提是Qt交叉编译已经完成,并能正常使用。
一些依赖:在终端运行:sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev安装:cmakeapt-get install cmake-guiapt-get install cmake解压:tar xvf OpenCV-2.3.1.tar.bz2我使用的是天嵌提供的交叉编译工具EABI_4.3.3。
安装在/opt/EmbedSky/4.3.3/bin/目录下,解压后,进入目录cd OpenCV-2.3.1运行:cmake-gui如果没有安装,系统会提示你安装选择source file 选择build目录点configure然后选择:next填路径:Operating System:arm-none-linuxCompilers:是交叉编译工具GCC与G++的目录,图中是我的目录Target Root:****点Finish然后再回到Cmake目录下:在这里选择该先与不先的东西,同时因为我之前在x86上编译过所以我把CMAKE_INSTALL_PREFIX改成:/usr/local/arm同时添加了WITH_QT因为添加WITH_QT_OPENGL时编译出错,所以后来去掉了。
OpenCV安装与移植
![OpenCV安装与移植](https://img.taocdn.com/s3/m/be48895d2b160b4e767fcf22.png)
OpenCV的Ubuntu安装和Smart210_ARM开发板移植软硬件环境:宿主机:Ubuntu 10.04 32bit开发板:友善之臂Smart210OpenCV:2.4.10其他:cmake version 2.8.0arm-linux-g++ 4.5.1 / arm-linux-gcc 4.5.1查看Ubuntu版本号的指令为:sudo lsb_release –a,效果如下图1:图1:查看ubuntu的版本号1.Opencv2.4.10在Ubuntu上安装●首先安装必要的软件库安装GCC:sudo apt-get install build-essential安装Cmake:sudo apt-get install cmake安装Git(可选):sudo apt-get install git安装GTK开发版:sudo apt-get install libgtk2.0-dev安装pkg-config:sudo apt-get install pkg-config安装Python:sudo apt-get install python3.2-dev安装Numpy:sudo apt-get install python-numpy安装媒体包:sudo apt-get install ffmpeg安装可选媒体包:sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev●在OpenCV官网下载源码包:/●在/home/brodon/Documents文件夹下解压缩后,命令行输入cmake-gui,配置opencv的x86版本。
具体的操作见图2,注意在安装中,放弃了ffmpeg,OpenGL 库的支持。
cmake完成后进入opencv-x86文件夹,输入make 和make install安装。
arm环境下opencv编译
![arm环境下opencv编译](https://img.taocdn.com/s3/m/9ad782fa0242a8956bece4fb.png)
1、下载opencv的源文件当前是0.9.9,并解压缩2、在工作路径运行配置命令./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/opt/crosstools/gcc-3.4.6-glibc-2.3/ --prefix=/usr/opencv/CPPFLAGS所指的头文件和库文件位置应当是arm编译器的所对应的路径,否则会出现编译异常,对宏FD_ZERO的识别问题。
3、执行make,make insatall,这时在/usr/opencv下生成相应的文件。
为了加入gtk的支持使用下面的./configure --host=arm-linux --prefix=$PREFIX --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/opt/gtkdfb/usr/local/include 参数CPPFLAGS=-I/opt/gtkdfb/usr/local/include只要指明了gtk相关库的位置GTHREAD_CFLAGS = -pthread -I/opt/gtkdfb/usr/local/include/glib-2.0 -I/opt/gtkdfb/usr/local/include/glib-2.0/glibGTHREAD_LIBS = -pthread -lgthread-2.0 -lglib-2.0GTK_CFLAGS = -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -I/opt/gtkdfb/usr/local/include/gtk-2.0-I/opt/gtkdfb/usr/local/gtk-2.0/gtk-I/opt/gtkdfb/usr/local/gtk-2.0/gdk -I/opt/gtkdfb/usr/local/gtk-2.0/gdk-pixbuf -I/opt/gtkdfb/usr/local/include/atk-1.0/atk -I/opt/gtkdfb/usr/local/include/pango-1.0/pango -I/opt/gtkdfb/usr/local/include/freetype2/freetype-I/opt/gtkdfb/usr/local/include/freetype2/freetype/config -I/opt/gtkdfb/usr/local/include/glib-2.0 -I/opt/gtkdfb/usr/local/include/glib-2.0/glibGTK_LIBS = -Wl,--export-dynamic -lgtk-2.0 -lgdk-2.0 -latk-1.0 -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgdk_pixbuf-2.0 -lm -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0实际编译采用的过程1、下载opencv的源文件当前是1.0.0,并解压缩2、修改configure文件设置GTK的安装路径3、export PERFIX=/用户的指定安装路径4、./configure --host=arm-linux --prefix=$PREFIX --without-carbon --without-quicktime--without-1394libs --without-ffmpeg --without-python --without-swig --disable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/opt/gtkdfb/usr/local/include5、make6、make install7、拷贝opencv.pc到指定的PKG_CONFIG_PATH变量所指定的路径中8、转到源程序路径/安装路径/share/opencv/samples/c,使用下面的命令编译程序9、arm-linux-g++ `pkg-config --cflags --libs opencv gtk+-2.0 gthread-2.0 pangoft2 libxml-2.0`drawing.c -o drawing10、把程序挂载到开发板上,使用下面的shell文件执行开发的程序#bin/sh#export QTDIR=$PWDexport TSLIB_ROOT=/opt/gtkdfb/usr/localexport LD_LIBRARY_PA TH=$PWD/lib:/lib:/opt/opencv/libexport TSLIB_TSDEVICE=/dev/input/tslib0export TSLIB_PLUGINDIR=$PWD/lib/tsexport TSLIB_CONSOLEDEVICE=noneexport QT_TSLIBDIR=$PWD/libexport TSLIB_CONFFILE=$PWD/etc/ts.confexport POINTERCAL_FILE=$PWD/etc/ts-calib.confexport TSLIB_CALIBFILE=$PWD/etc/ts-calib.confexport PKG_CONFIG_PA TH=$PWD/lib/pkgconfigexport TSLIB_FBDEVICE=/dev/fb0export LD_PRELOAD=$PWD/lib/libts.so#/root/touchscream/bin/ts_calibrate#$PWD/bin/ts_print_rawexport exec_prefix=$PWD#./arrow#./calendar./drawing11、出现错误libstdc++.so.6: cannot open shared object file: No such file or directory拷贝文件到库文件路径问题:在使用拉普拉斯是出现下面的问题:Formats of input arguments do not match (Laplacian can either transform 8u->16s, or 8u->32f, or 32f->32f.The channel number must be the same.)原因:Laplace变换的输入和输出必须满足提示中所要求的的关系。
Opencv2.0移植ARM全过程
![Opencv2.0移植ARM全过程](https://img.taocdn.com/s3/m/3d0503d5d15abe23482f4d96.png)
2. 配置选项: $ ./configure --prefix=/home/liuxiu/opencv-arm --enable-pic –enable-shared --cross-prefix=armlinux- --host=arm-linux --extra-cflags=-I/home/liuxiu/opencv-arm/include --extra-ldflags=L/home/liuxiu/opencv-arm/lib --enable-shared --enable-pthread –disable-asm 出现 ./version.sh: 行 2: git: 未找到命令 Platform: ARM System: LINUX asm: no avs input: no lavf input: no ffms input: no mp4 output: no pthread: yes debug: no gprof: no PIC: yes shared: yes visualize: no
二、交叉编译 libjpeg
版本 jpegsrc.v6b,这些库都可以从官网上下载的。
1. 解压进入目录
2. 配置选项: $./configure –prefix=/home/liuxiu/opencv-arm –exec-prefix=/home/liuxiu/opencv-arm –-enableshared --enable-static 下面分别介绍这几个参数的作用: --prefix=/home/liuxiu/opencv-arm : 执行 make install 后,会将与体系无关的文件拷贝到此目录 下,具 体如下: /home/liuxiu/opencv-arm ....................................
嵌入式opencv-2.0.0移植
![嵌入式opencv-2.0.0移植](https://img.taocdn.com/s3/m/f8c53add76a20029bd642d56.png)
嵌入式opencv-2.0.0,Qt-4.6.3移植一、移植环境操作系统:ubuntu 14.04交叉编译器:arm-linux-gcc-4.4.3二、移植过程在opencv移植之前我们需要解决opencv的一些模块的依赖关系,目前我们需要的模块的依赖关系由以下几个包提供:jpegsrc.v6b.tar.gz (jpeg函数库)libpng-1.2.18.tar.gz (png函数库库)zlib-1.2.3.tar.gz (z函数库)x264-snapshot-20100410-2245.tar.bz2 (x264函数库)yasm-0.7.2.tar.gz (汇编编译器,编译x264时需要用到)xvidcore-1.3.2.tar.gz (xvid函数库)ffmpeg-0.5.3.tar.bz2 (ffmpeg源码包)O penCV-2.0.0.tar.bz2 (OpenCV源码包)这些包的安装是有顺序的,请按照以下顺序安装。
1、安装交叉编译工具#tar zxvf arm-linux-gcc-4.4.3.tar.gz -C/root/添加环境变量#vim /root/.bashrc在路径中添加/opt/toolschnia/4.4.3/bin与已有的路径用冒号隔开刷新环境变量:#source /root/.bashrc2、交叉编译libz#tar zxvf zlib-1.2.3.tar.gz#cd zlib-1.2.3#CC=arm-linux-gcc ./configure --prefix=/root/arm/4.4.3/arm-none-linux-gnueabi –shared#make#make install3、交叉编译libjpeg#tar –zvxf jpegsrc.v6b.tar.gz#cdjpeg-6b#./configure--prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --enable-shared --enable-static修改生成的Makefile文件CC=gcc改为CC=arm-linux-gcAR=ar rc改为AR=arm-linux-ar rcAR2=ranlib改为AR2=arm-linux-ranlib#make需在/opt/toolschnia/4.4.3/arm-none-linux-guneabi目录下创建/man/man1目录,才能执行安装命令。
OpenCV1.0.0移植到ARM (utu2440)
![OpenCV1.0.0移植到ARM (utu2440)](https://img.taocdn.com/s3/m/c5e42eecf8c75fbfc77db2fe.png)
交叉编译zlib交叉编译png交叉编译libjpeg以上三个在minigui移植中已经试过了,具体参考该文件。
在opencv目录下运行:./configure --host=arm-linux --without-gtk --without-carbon --without-v4l --without-v4l2 --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared--disable-apps CXX=arm-linux-g++ --prefix=/home/wudean/opencv-1.0.0/_install注:∙--host=arm-linux :指出交叉编译arm平台∙--without-gtk:忽略gtk+2.0 windows∙--without-carbon: 不使用Mac OS上的X库∙--without-quicktime∙--without-1394libs∙--without-ffmpeg∙--without-python∙--without-swig∙--without-v4l --without-v4l2:不需要v4l和v4l2∙--enable-static :生成静态库∙--enable-shared:生成动态库,这一项必须要有,不要以后可能会出现加载动态库失败∙CXX=arm-linux-g++ :指定编译工具(我用的是4.3.3)∙--prefix=/home/wudean/opencv-1.0.0/_install:这个是安装目录,最好是这样做,以免污染系统OpenCV会用到一些dev的包,如png.h,jpeglib.h,所以需要预先交叉编译好zlib/png/jpeg 库,把他们生成的*.h放到相应的交叉编译器的include里,*.so.*放到lib,还要拷贝到目标板的根目录的lib中。
linux下把某些开源库移植到arm开发板的基本流程
![linux下把某些开源库移植到arm开发板的基本流程](https://img.taocdn.com/s3/m/7cecd7693069a45177232f60ddccda38376be1a7.png)
linux下把某些开源库移植到arm开发板的基本流程
将某一开源库移植到ARM开发板的基本流程如下:
1. 了解ARM开发板的硬件平台参数(例如CPU架构、内存大小等)以及操作系统类型和版本(例如Linux)。
2. 下载所需的编译工具链,包括ARM交叉编译器、交叉编译时所需的库文件等。
3. 下载需要移植的开源库源代码。
4. 配置交叉编译器,将其与ARM开发板的硬件平台参数进行匹配。
5. 编译并链接代码,生成ARM平台可执行文件。
6. 将编译好的可执行文件拷贝到ARM开发板上进行测试,并根据需要进行调试和修改。
7. 重复上述步骤,直到移植的开源库能够在ARM开发板上正常运行。
需要注意的是,在移植过程中还需要考虑一些特殊情况,例如可能需
要修改源代码中的一些与硬件平台相关的部分,以确保其能够正确地运行在ARM开发板上。
Opencv4.1.0交叉编译----终端摄像头内算法嵌入,海思HISI、雄迈ARM编译链使用经验
![Opencv4.1.0交叉编译----终端摄像头内算法嵌入,海思HISI、雄迈ARM编译链使用经验](https://img.taocdn.com/s3/m/dcaee0e6bb0d4a7302768e9951e79b8968026803.png)
Opencv4.1.0交叉编译----终端摄像头内算法嵌⼊,海思HISI、雄迈ARM编译链使⽤经验引: 项⽬需求,在终端摄像头⾥嵌⼊简单算法,进⾏图像预处理,考虑使⽤Opencv和dlib实现,本博客阿星记录Opencv在摄像头中arm 开发板交叉编译与使⽤的经验环境:主机系统:Ubuntu16.04Opencv版本: 4.1.0交叉编译器:海思Hi3516C V500R001C02SPC010版本编译链,雄迈编译链⾃动化编译⼯具: cmake version 3.5.1⼀、交叉编译opencv引:本⽂使⽤两种博主亲测⽅法进⾏opencv的交叉编译下载Opencv安装cmakesudo apt-get install cmakesudo apt-get install cmake-gui安装基础# ubuntu16.04 默认⾃带安装sudo apt-get install build-essential# ubuntu16.04 除了git,其他默认⾃带安装sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev# libdc1394-22-dev 需要安装,其他默认⾃带安装sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev⼀ >1、⽅法⼀确保已安装cmake,直接使⽤下述shell脚本进⾏⼀键交叉编译,项⽬后期博主采⽤的即本⽅式,交叉编译中会出现的问题,⽅法⼀⼆相同,记录在本博客编译⽅法之后将opencv源码解压后,进⼊opencv⽬录,创建build⽂件夹。
COS到 ARM的移植简版介绍
![COS到 ARM的移植简版介绍](https://img.taocdn.com/s3/m/89344100227916888586d702.png)
μCOS-II到ARM S3C2440的移植学院:软件学院专业:计算机科学与技术姓名:刘志伟学号: 14999065年级: 2 0 1 4级指导老师:崔黎黎完成时间: 2017年O4月O5日1、移植条件一般来说,能移植μC /OS-Ⅱ的微处理器必须满足以下条件:1) 处理器的C编译器能产生可重入型代码。
2) 处理器支持中断,并且能产生定时中断。
3) 用C语言就可以开/关中断。
4) 处理器能支持一定数量的数据存储硬件堆栈。
5) 处理器有将堆栈指针及其他CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。
2、移植需要编写的文件OS_CPU.H(C语言头文件)OS_CPU_C.C(C程序源文件)OS_CPU_A.ASM(汇编程序源文件)3、OS_CPU.H的移植1)数据类型的定义2)堆栈的定义堆栈中,编译器的编译选项和由此生成的堆栈指令决定堆栈的增长方向。
在μC/OS-Ⅱ中, 用OS_STK_GROWTH 来设置堆栈的增长方向, 其宏定义为: #define OS_STK_GROWTH 1; /* 堆栈从高地址向低地址增长*/ #define OS_STK_GROWTH 0; /* 堆栈从低地址向高地址增长*/ 3)中断与临界区代码#define OS_TASK_SW()OSCtxSw() /*任务切换*/#define OS_EXIT_CRITICAL()ARMDisabIeInt() /*关闭中断*/#define OS_ENTER_CRITICAL()ARMEnableInt()4)使用软中断SWI作底层接口4、OS_CPU_C.C的移植在此文件中, 要求我们必须编写10 个简单的 C 函数。
OStaskStkInit(); /*任务堆栈初始化函数*/ OStaskCreateHook (); /*任务建立接口函数*/ OStaskDelHook (); /*任务删除接口函数*/ OStaskSwHook (); /*任务切换接口函数*/ OStaskIdleHook (); /*空闲任务接口函数*/ OStaskStatHook (); /*统计任务接口函数*/ OSTimeTickHook (); /*时钟节拍接口函数*/ OStaskHookBegin (); /*系统初始化开始接口函数*/ OStaskHookEnd (); /*系统初始化结束接口函数*/ OSTCBInitHook (); /*控制块初始化接口函数*/唯一必要的函数是OsTaskStkInt()函数。
opencv移植
![opencv移植](https://img.taocdn.com/s3/m/d7acd68a680203d8ce2f244b.png)
• 普通的gcc編譯可在本機執行,但放到ARM 平台上無法執行 • 需建立交叉編譯環境:arm-linux-gcc • (為使能在ARM上執 arm-linux-gcc-3.4.1.tar.bz2 -C / • gedit /etc/bashrc • PATH=$PATH:/usr/local/arm/3.4.1/bin
測試
• arm-linux-gcc drawing.c -o drawing `pkg-config -cflags --libs opencv` • 編譯成功 ! • 目前問題: • 將編譯生成的可執行檔放置arm平台上 • OpenCV ERROR: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support) • 嘗試解決方案: • 從新安裝gtk不產生動態連結庫,全改成靜態連結庫
•
IplImage* frame=0; CvCapture* capture=cvCaptureFromCAM(-1); if( capture == NULL ) { printf("not ok.\n"); } else { printf("OK.\n"); } cvGrabFrame( capture ); frame = cvRetrieveFrame( capture ); cvSaveImage("/ggggg.bmp",frame);
return 0; }
ggggg.bmp
測試結論
• 問題出再OpenCv的highgui部分 • OpenCv中的highgui無法移植 • 但是我們不使用highgui的話,是可以再arm 上跑起來的
Linux安装Opencv详细流程以及arm移植opencv
![Linux安装Opencv详细流程以及arm移植opencv](https://img.taocdn.com/s3/m/61a0ed4ab307e87101f69695.png)
Linux Ubuntu 安装Opencv作者:Tiger(xia)1.我们需要安装一个cmake(我这里用的是2.8.12.2版本)2.首先下载一个cmake3.Tar zxvf cmake的压缩报4.进入解压的文件夹输入./bootstrap5.make6.make install7.还需要一些库libgtk2.0-dev build-essential pkg-config (用apt-get install +对应的库)8.在下载Opencv(我是2.4.9版本)(默认安装在/usr/local/bin 和/usr/local/include)$ cd OpenCV-2.4.9$ cmake CMakeLists.txt$ make && make install9.export LD_LIBRARY_PATH=/usr/local/lib10.测试就加个Opencv的头文件就知道了11.pkg-config --modversion opencv12.编译gxx `pkg-config opencv --libs --cflags opencv` opencv_test.c -o test注意:一定先安装gtk库再安装opencvOpencv 移植编译说明:我们移植opencv 到itop arm板,交叉编译器是arm-none-linux-gnueabi-gcc,和arm-none-linux-gnueabi-g++前面已经介绍了opencv和cmake 的安装,这里用的是图形界面安装cmake-gui来进行opencv的交叉编译。
1.安装cmake-qt-gui (cmake的界面终端)sudo apt-get install cmake-qt-gui2.解压opencv2.4.9 tar -xzvf opencv2.4.9.tar.gz3.对opencv的交叉编译的相关配置在点击Configure那个按钮后要选择交叉编译如图:编译时要去掉几个cmake的复选框的BUILD_opencv_ocl 、WITH_OPENCL、WITH_TIFF 选项(不去掉编译时要出错哦)。
用GNU工具链实现μCOS到ARM平台的移植
![用GNU工具链实现μCOS到ARM平台的移植](https://img.taocdn.com/s3/m/f9c692731711cc7931b716df.png)
m m p ( 、sr f ) sr f ) . e c y ) vpi ( 、pi ( 等 n n 使用 A S开发 平 台与使 用 G U工 具链 的重 要 D N
区别 在 于 前 者 是 在 Widw n o s环 境 下 , 后 者 是 在 而 Ln x iu 环境 下. 目前 , 管 已有一 些用 G U工具 链 实 尽 N
21 0 0年 1 月 1 第 6期
南 京 晓 庄 学 院 学 报
J RNAL OF N OU ANJNG AO I XI ZHU ANG UNI VER I Y ST
NO . 01 V2 0 No.6
用 G U工 具链 实 现 t O N x S到 A M 平 台 的移植 C R
现 A MtO R C S移植 的成功 案例 , x 但很 难 找到 完整 的 程序 代码 . 学生 在教 学实 验过程 中参考 资料 太少 , 感 觉无 从下 手. 也是本 文 系统 的一个重 要 目的 : 这 使用
G U工 具链 实 现 一套 完 整 的 的 A M I O N R C S移 植代 x
1
oS移 植 要 点
码 , 学生研 究 、 习与实验 . 供 学
IO x S移植 的基 本 思 想在 文 献 [ ] C 1 中有 详 细 论
述 , 文 只就在 A M 平 台所 涉及 的 内容加 以 阐述. 本 R
2 移 植 的关 键 步 骤 及 实现 方 法
如前所 述 , t O 将 x S移植 到 A M平 台 的重 点是 C R A M 主机 的 引导启 动 、 R 中断系统 的建 立 、 C S运行 tO x
中 图 分 类 号 :P 1 T36 文献标识码 : A 文章 编 号 :09— 9 2 2 1 )6— 0 5— 3 10 7 0 (0 0 0 0 8 0
Opencv3.2.0交叉编译和移植
![Opencv3.2.0交叉编译和移植](https://img.taocdn.com/s3/m/acb791156ad97f192279168884868762caaebb9c.png)
Opencv3.2.0交叉编译和移植1. 从官⽹()下载opencv3.2.0源码压缩包。
2. 将压缩包上传到Ubuntu下的⼯作⽬录(/home/work)下,使⽤命令tar zxvf opencv-3.2.0.tar.gz解压到当前⽂件夹。
3. cd opencv-3.2.0/platforms/linux进⼊linux编译⽬录。
4. sudogedit arm.toolchain.cmake修改该cmake⽂件内容如下:if(COMMAND toolchain_save_config)return() # prevent recursive callendif()set(CMAKE_SYSTEM_NAME Linux)set(CMAKE_SYSTEM_VERSION 1)if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)set(CMAKE_SYSTEM_PROCESSOR arm-linux-gnueabihf)else()#message("CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}")endif()include("${CMAKE_CURRENT_LIST_DIR}/gnu.toolchain.cmake")if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm AND NOT ARM_IGNORE_FP)set(FLOAT_ABI_SUFFIX "")if(NOT SOFTFP)set(FLOAT_ABI_SUFFIX "hf")endif()endif()if(NOT "x${GCC_COMPILER_VERSION}" STREQUAL "x")set(__GCC_VER_SUFFIX "-${GCC_COMPILER_VERSION}")endif()#CROSS COMPILE SETTING#set(CMAKE_C_COMPILER "/usr/local/linaro-multilib-2013.09-gcc4.8/bin/arm-linux-gnueabihf-gcc")#set(CMAKE_CXX_COMPILER "/usr/local/linaro-multilib-2013.09-gcc4.8/bin/arm-linux-gnueabihf-g++")#set(CMAKE_FIND_ROOT_PATH "/usr/local/linaro-multilib-2013.09-gcc4.8")#set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)#set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)#set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)set(TOOLCHAIN_DIR "/usr/local/linaro-multilib-2013.09-gcc4.8/")set(CMAKE_C_COMPILER "/usr/local/linaro-multilib-2013.09-gcc4.8/bin/arm-linux-gnueabihf-gcc")set(CMAKE_CXX_COMPILER "/usr/local/linaro-multilib-2013.09-gcc4.8/bin/arm-linux-gnueabihf-g++")set(CMAKE_FIND_ROOT_PATH /usr/local/linaro-multilib-2013.09-gcc4.8/)set(ARM_LINUX_SYSROOT /usr/local/linaro-multilib-2013.09-gcc4.8 CACHE PATH "ARM cross compile system root")link_directories("/usr/local/linaro-multilib-2013.09-gcc4.8")link_libraries("/usr/local/linaro-multilib-2013.09-gcc4.8/lib/libz.so.1")#MESSAGE(STATUS "This is cross compile dir --->"$(CMAKE_C_COMPILER))#if(NOT DEFINED CMAKE_C_COMPILER)# find_program(CMAKE_C_COMPILER NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-gcc${__GCC_VER_SUFFIX})#else()# #message(WARNING "CMAKE_C_COMPILER=${CMAKE_C_COMPILER} is defined")#endif()#if(NOT DEFINED CMAKE_CXX_COMPILER)# find_program(CMAKE_CXX_COMPILER NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-g++${__GCC_VER_SUFFIX})#else()# #message(WARNING "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} is defined")#endif()#if(NOT DEFINED CMAKE_LINKER)# find_program(CMAKE_LINKER NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ld${__GCC_VER_SUFFIX} ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ld) #else()# #message(WARNING "CMAKE_LINKER=${CMAKE_LINKER} is defined")#endif()#if(NOT DEFINED CMAKE_AR)# find_program(CMAKE_AR NAMES ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ar${__GCC_VER_SUFFIX} ${GNU_MACHINE}${FLOAT_ABI_SUFFIX}-ar)#else()# #message(WARNING "CMAKE_AR=${CMAKE_AR} is defined")#endif()#if(NOT DEFINED ARM_LINUX_SYSROOT AND DEFINED GNU_MACHINE)# set(ARM_LINUX_SYSROOT /usr/${GNU_MACHINE}${FLOAT_ABI_SUFFIX})#endif()#if(NOT DEFINED CMAKE_CXX_FLAGS)# set(CMAKE_CXX_FLAGS "" CACHE INTERAL "")# set(CMAKE_C_FLAGS "" CACHE INTERAL "")# set(CMAKE_SHARED_LINKER_FLAGS "" CACHE INTERAL "")# set(CMAKE_MODULE_LINKER_FLAGS "" CACHE INTERAL "")# set(CMAKE_EXE_LINKER_FLAGS "" CACHE INTERAL "")# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")# if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm)# set(CMAKE_CXX_FLAGS "-mthumb ${CMAKE_CXX_FLAGS}")# set(CMAKE_C_FLAGS "-mthumb ${CMAKE_C_FLAGS}")# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,nocopyreloc")# endif()# if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm)# set(ARM_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")# elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)# set(ARM_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")# endif()# set(CMAKE_SHARED_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}")# set(CMAKE_MODULE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}")# set(CMAKE_EXE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}")#else()# #message(WARNING "CMAKE_CXX_FLAGS='${CMAKE_CXX_FLAGS}' is defined")#endif()set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}")if(USE_NEON)message(WARNING "You use obsolete variable USE_NEON to enable NEON instruction set. Use -DENABLE_NEON=ON instead." )set(ENABLE_NEON TRUE)elseif(USE_VFPV3)message(WARNING "You use obsolete variable USE_VFPV3 to enable VFPV3 instruction set. Use -DENABLE_VFPV3=ON instead." )set(ENABLE_VFPV3 TRUE)endif()#set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${ARM_LINUX_SYSROOT})if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR})set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR})endif()set(TOOLCHAIN_CONFIG_VARS ${TOOLCHAIN_CONFIG_VARS}ARM_LINUX_SYSROOTENABLE_NEONENABLE_VFPV3CUDA_TOOLKIT_ROOT_DIR)set( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." )set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)# macro to find programs on the host OSmacro( find_host_program )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )if( CMAKE_HOST_WIN32 )SET( WIN32 1 )SET( UNIX )elseif( CMAKE_HOST_APPLE )SET( APPLE 1 )SET( UNIX )endif()find_program( ${ARGN} )SET( WIN32 )SET( APPLE )SET( UNIX 1 )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )endmacro()# macro to find packages on the host OSmacro( find_host_package )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )if( CMAKE_HOST_WIN32 )SET( WIN32 1 )SET( UNIX )elseif( CMAKE_HOST_APPLE )SET( APPLE 1 )SET( UNIX )endif()find_package( ${ARGN} )SET( WIN32 )SET( APPLE )SET( UNIX 1 )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )endmacro()toolchain_save_config()5. 在opencv-3.2.0⽂件夹下新建编译⽂件夹mkdir build_src; cd build_src/ 进⼊编译⽂件夹。
arm环境下opencv编译
![arm环境下opencv编译](https://img.taocdn.com/s3/m/ca326d2111661ed9ad51f01dc281e53a58025162.png)
1、下载open cv的源文件当前是0.9.9,并解压缩2、在工作路径运行配置命令./config ure --host=arm-linux--withou t-gtk --withou t-carbon--withou t-quickt ime --withou t-1394li bs --withou t-ffmpeg--withou t-python--withou t-swig --enable-static --disabl e-shared--disabl e-apps CXX=arm-linux-g++ CPPFLA GS=-I/opt/crosst ools/gcc-3.4.6-glibc-2.3/ --prefix=/usr/opencv/CPPFLA GS所指的头文件和库文件位置应当是arm编译器的所对应的路径,否则会出现编译异常,对宏FD_ZERO的识别问题。
3、执行make,make insata l l,这时在/usr/opencv下生成相应的文件。
为了加入gt k的支持使用下面的./config ure --host=arm-linux--prefix=$PREFIX--withou t-carbon--withou t-quickt ime --withou t-1394li bs --withou t-ffmpeg--withou t-python--withou t-swig --enable-static --disabl e-shared --disabl e-apps CXX=arm-linux-g++ CPPFLA GS=-I/opt/gtkdfb/usr/local/includ e 参数CPPFLAGS=-I/opt/gtkdfb/usr/local/includ e只要指明了gtk相关库的位置GTHREA D_CFL AGS = -pthrea d -I/opt/gtkdfb/usr/local/includ e/glib-2.0 -I/opt/gtkdfb/usr/local/includ e/glib-2.0/glibGTHREA D_LIB S = -pthrea d -lgthre ad-2.0 -lglib-2.0GTK_CF LAGS= -DXTHRE ADS -D_REEN TRANT-DXUSE_MTSAF E_API -I/opt/gtkdfb/usr/local/includ e/gtk-2.0-I/opt/gtkdfb/usr/local/gtk-2.0/gtk-I/opt/gtkdfb/usr/local/gtk-2.0/gdk -I/opt/gtkdfb/usr/local/gtk-2.0/gdk-pixbuf -I/opt/gtkdfb/usr/local/includ e/atk-1.0/atk -I/opt/gtkdfb/usr/local/includ e/pango-1.0/pango-I/opt/gtkdfb/usr/local/includ e/freety pe2/freety pe-I/opt/gtkdfb/usr/local/includ e/freety pe2/freety pe/config-I/opt/gtkdfb/usr/local/includ e/glib-2.0 -I/opt/gtkdfb/usr/local/includ e/glib-2.0/glibGTK_LI BS = -Wl,--export-dynami c -lgtk-2.0 -lgdk-2.0 -latk-1.0 -lpango xft-1.0 -lpango x-1.0 -lpango-1.0 -lgdk_p ixbuf-2.0 -lm -lgobje ct-2.0 -lgmodu le-2.0 -ldl -lglib-2.0实际编译采用的过程1、下载open cv的源文件当前是1.0.0,并解压缩2、修改confi gure文件设置G TK的安装路径3、export PERFIX=/用户的指定安装路径4、./config ure --host=arm-linux--prefix=$PREFIX--withou t-carbon--withou t-quickt ime--withou t-1394li bs --withou t-ffmpeg--withou t-python--withou t-swig --disabl e-static --enable-shared--disabl e-apps CXX=arm-linux-g++ CPPFLA GS=-I/opt/gtkdfb/usr/local/includ e5、make6、make instal l7、拷贝open cv.pc到指定的PK G_C ONFIG_PA TH变量所指定的路径中8、转到源程序路径/安装路径/share/opencv/sample s/c,使用下面的命令编译程序9、arm-linux-g++ `pkg-config--cflags --libs opencv gtk+-2.0 gthrea d-2.0 pangof t2 libxml-2.0`drawin g.c -o drawin g10、把程序挂载到开发板上,使用下面的s hell文件执行开发的程序#bin/sh#export QTDIR=$PWDexport TSLIB_ROOT=/opt/gtkdfb/usr/localexport LD_LIB RARY_PATH=$PWD/lib:/lib:/opt/opencv/libexport TSLIB_TSDEV ICE=/dev/input/tslib0export TSLIB_PLUGI NDIR=$PWD/lib/tsexport TSLIB_CONSO LEDEV ICE=noneexport QT_TSL IBDIR=$PWD/libexport TSLIB_CONFF ILE=$PWD/etc/ts.confexport POINTE RCAL_FILE=$PWD/etc/ts-calib.confexport TSLIB_CALIB FILE=$PWD/etc/ts-calib.confexport PKG_CO NFIG_PATH=$PWD/lib/pkgcon figexport TSLIB_FBDEV ICE=/dev/fb0export LD_PRE LOAD=$PWD/lib/libts.so#/root/touchs cream/bin/ts_cal ibrat e#$PWD/bin/ts_pri nt_ra wexport exec_p refix=$PWD#./arrow#./calend ar./drawin g11、出现错误libstdc++.so.6: cannot open shared object file: No such file or direct ory拷贝文件到库文件路径问题:在使用拉普拉斯是出现下面的问题:Format s of inputargume nts do not match(Laplac ian can either transf orm 8u->16s, or 8u->32f, or 32f->32f.The channe l number must be the same.)原因:Laplac e变换的输入和输出必须满足提示中所要求的的关系。
OpenCV在ARM上的移植
![OpenCV在ARM上的移植](https://img.taocdn.com/s3/m/60b2ee03854769eae009581b6bd97f192279bf20.png)
OpenCV在ARM上的移植与X86 Linux类似,请参考:本⽂在此基础上进⾏进⼀步操作。
⽹络上很多移植编译的⽅法⽐较⽼,多数针对OpenCV 1.0,⽽且⽅法很⿇烦,不仔细操作很容易出错,我的⽅法是尽可能的利⽤现成的⼯具,尽量图形化界⾯配置操作,⽅便编译配置。
软硬件环境宿主机:Ubuntu 12.04 32bit开发板:OK6410OpenCV: 2.4.3其他:arm-linux-g++ 4.3.2 / arm-linux-gcc 4.3.2CMake-gui 2.8.10Cmake的安装OpenCV 2.2以后版本需要使⽤Cmake⽣成makefile⽂件,因此需要先安装cmake。
ubuntu下安装cmake⽐较简单,apt-get install cmake如果觉得⾃带的版本不符合要求,可以下载安装包。
下载最新版的安装包:这⾥下载已经编译好的,这样只需要解压⾄需要的⽬录下即可使⽤:tar zxvf cmake-2.8.10.2-Linux-i386.tar.gz –C /usr/local/设置环境变量:sudo gedit /home/emouse/.bashrc在打开的⽂件后添加:export PATH=$PATH:/usr/local/cmake-2.8.10.2-Linux-i386/bin查看版本,测试是否安装成功:root@emouse:/home# cmake --versioncmake version 2.8.10.2转载注明:OpenCV 的交叉编译解压OpenCV压缩⽂件,得到⽂件夹。
#cmake-gui 打开cmake的gui界⾯,开始进⾏配置,配置过程如下图所⽰:1、选定解压后的源⽂件和将要编译的⽂件⽬录,这个⾃⼰之前先建好。
2、点击Configure 选择⼯程类型,选择交叉编译,点击下⼀步。
3、在下图的界⾯中选择交叉编译⼯具链以及库⽂件相关信息,按照图中的进⾏填写,其中红框部分为交叉编译⼯具链的实际路径,根据宿主机实际安装路径填写。
OpenCV移植到ARM全过程
![OpenCV移植到ARM全过程](https://img.taocdn.com/s3/m/41fecbc38bd63186bcebbc47.png)
OpenCV移植到ARM全过程Host:VMware + Ubuntu 10.04Target:Real6410 with Linux 2.6.28.6Crossing Compiler:arm-none-linux-gnueabi-4.3.2 with EABI一交叉编译链的安装1 解压,即可得到arm-none-linux-gnueabi 目录# tar –xjvf arm-none-linux-gnueabi-4.3.2.tar.bz22 为了使用方便,还可以编辑/etc/bash.bashrc 文件添加把编译器路径到环境变量PATH 中,只要在这个文件中添加下面这2 个语句即可:PATH=/root/ arm-none-linux-gnueabi-4.1.0/bin:$PATHexport PATH3 编辑完毕后使用source /etc/bash.bashrc 命令执行以下这个文件,让设置生效,之后再输入:# arm-none-linux-gnueabi-gcc -v如果输出下面的信息则表面设置成功:Using built-in specs.Target: arm-none-linux-gnueabiConfigured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https:///GNUToolchain/ --disable-nls--prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/ bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/binThread model: posixgcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)至此交叉编译链安装完成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Opencv-2.1.0 的arm移植我的环境Host:Ubuntu 14.04Target:tq2410 with Linux 2.6.30.4Crossing Compiler:arm-linux-gcc 4.3.2一交叉编译链的安装1# cd /usr/local解压,即可得到arm-none-linux-gnueabi 目录# tar xzvf arm-none-linux-gnueabi-4.3.2.tgz -C ./2 编辑/etc/bash.bashrc文件添加把编译器路径到环境变量PA TH中,只要在这个文件中添加下面这2 个语句即可:PATH=/usr/local/arm/4.3.2/bin:$PA THexport PA TH3 编辑完毕后使用source /etc/bash.bashrc 命令执行以下这个文件,让设置生效,之后再输入:# arm-none-linux-gnueabi-gcc -v如果输出下面的信息则表面设置成功:Using built-in specs.Target: arm-none-linux-gnueabiConfigured with:/scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu--enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https:///GNUToolchain/--disable-nls--prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnu eabi/libc--with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc--with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-p c-linux-gnu/usr--with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-non e-linux-gnueabi-i686-pc-linux-gnu/usr--disable-libgomp--enable-poison-system-directories--with-build-time-tools=/scratch/julian/lit e-respin/linux/install/arm-none-linux-gnueabi/ bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin Thread model: posixgcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)但是,此时会报错:bash:/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc:没有那个文件或目录这是因为是为62位机与32位不兼容,在64位ubuntu系统上运行32位程序需要安装32位lib网上很多地方说用#sudo apt-get install ia32-libs可解决,但是我执行之后却显示:# sudo apt-get install ia32-libs正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成现在没有可用的软件包ia32-libs,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,或者只能在其他发布源中找到可是下列软件包取代了它:lib32z1 lib32ncurses5 lib32bz2-1.0E: 软件包ia32-libs 没有可供安装的候选者运行以下命令即可:#sudo apt-get install g++-multilib这时即可显示上面的信息,交叉编译链安装完成二OpenCV2.0.0交叉编译过程ps:到这一步后网上很多教程都是开始交叉编译x264,xvid,ffmpeg等等,作者尝试过未果。
所以转而投降cmake-gui,最后顺利编译成功。
强烈推荐cmake-gui,简单实用。
1.安装cmake-gui #sudo apt-get install cmake-qt-gui2.在usr/local新建文件夹# mkdir opencv把下载的OpenCV-2.0.0.tar.bz2解压到usr/local/opencv 目录下3、然后在usr/local/opencv 新建一个opencv-arm 文件夹,作为CMake编译arm版本的工作目录# mkdir opencv-arm如下图所示:3、在终端里调出CMake gui界面:# cmake-gui按照下图方式选择源码目录和build目录然后点击Configure按钮,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next按照如下方式配置:注:/usr/local/arm/4.3.2 为交叉编译工具arm-linux-g++/gcc 的所在包含文件夹(在bin 文件夹里面)注:Target System选项里Operation我认为是arm板子上的操作系统,对应我的Version为2.6.30.4,上图中没有更改然后点击“Finish” 按钮;然后点击Generate按钮生成Makefile;4.在/usr/local/opencv/opencv-arm目录下$sudo make(1)83%报错:Linking CXX executable ../../bin/opencv_createsamples../../lib/libopencv_core.so: undefined reference to `clock_gettime'../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'../../lib/libopencv_core.so: undefined reference to `pthread_key_create解决方法:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译(3)又报错:Linking CXX executable ../../bin/opencv_createsamples此时又出错:../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen'../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree'../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset' 解决方法:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF(不再对TIFF图像格式支持。
重新编译,成功5、然后运行make install,将opencv生成的库和头文件(在/usr/local/opencv/opencv-arm/lib下)安装到目录/usr/local/arm/4.3.2/lib/opencv/,结果如下:6、把这5个.so 库文件拷贝到ARM板系统中的/lib 目录下面:(如下是添加之后的截图)7、下来就是编写验证程序了:首先得确保摄像头在ARM板上的使用是正常的,具体情况请查阅大神的博文:《摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用》参考文档:1.Opencv-2.0.0的ARM移植和使用(Ubuntu10.04 / OK6410开发板/ linux3.01)/index.php?c=article&a=read&id=473282. OpenCV移植到ARM 全过程/jemofh159/article/details/75537473.ARM编译OpenCV 2.X/link?url=DI0Ou_QHJC458rLttdZkpws83PTpuI5K10-0FCnF9E3_sfva6 CeM31_AgZsCHsFV2hIQFvP7bsvsdrEsiQWf6qAsJrFLtZ96DwhvkFp_QAS4.在64位ubuntu系统上运作32位程序需要安装32位lib/operating-system/1454963.html。