Opencv-2.49在mini2440上的移植

1、前期准备工作

a. 安装交叉编译链

我使用的是arm-linux-gcc 4.3.2,解压到目录/usr/local/arm/4.3.2,然后在环境变量PATH中增加/usr/local/arm/4.3.2/bin

b. 安装CMake

Opencv 2.0之后的版本,必须使用CMake创建Makefile。我使用的CMake版本是2.8.2,解压到目录/usr/local/cmake-2.8.2-Linux-i386,然后在环境变量PATH中增加/usr/local/cmake-2.8.2-Linux-i386/bin

2、编译Opencv

1、解压Opencv 2.4.9

2、创建build目录,作为CMake编译arm版本的工作目录

3、在X环境下,运行cmake-gui(如果没装的话,按照提示安装一个)

选择源代码目录

选择Build目录:

点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next

Operating System填写arm-inux

点击NEXT再跳出的界面中做如下设置

Operating System 选择目标系统arm-linux

Compilers中选择交叉编译器的gcc和g++

Target Root选择交叉编译器的路径

程序库的Target Root填写/usr/local/arm/,然后点击Finish

点击Finish按钮,开始生成配置文件,但是这个时候会报错

System is unknown to cmake, create:

Platform/arm-linux to use this system, please send your config file to [email protected] so it can be added to cmake

这个是因为Operating System填写的arm-linux不算Cmake能识别的目标系统,这里可以忽略这个错误。

但是这个时候还有其他错误

CMake Error at cmake/FindCUDA.cmake:763 (if):

if given arguments:

"CUDA_VERSION" "VERSION_GREATER" "5.0" "AND" "CMAKE_CROSSCOMPILING" "AND" "MATCHES" "arm"

Unknown arguments specified

Call Stack (most recent call first):

cmake/OpenCVDetectCUDA.cmake:26 (find_package)

cmake/OpenCVFindLibsPerf.cmake:24 (include)

CMakeLists.txt:468 (include)

应该是我的电脑里没有安装CUDA的库,因为后面的开发中也不会用到CUDA,所以我将 WITH_CUDA的钩去掉,然后再点击一次Configure按钮,看看还有没有提示缺少哪些第三方库,网上其他文章说WITH_TIFF要去掉,但是这里没有报错就不管它了。同时可以将CMAKE_INSTALL_PREFIX改成你想要的路径,这个路径所opencv最后库文件和头文件的安装路径。在不存在其他问题后点击Generate生存Makefile文件,如果前面第三方的问题没有解决这里是会报错而无法生存Makefile。生成的Makefile文件和Cmake配置文件都在
Wher to build the binarier 中设置的文件夹下

修改默认配置,默认安装目录为/usr/local,由于我之前有装x86版的opencv,所以对于交叉编译的库来说并不合适,所以我把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm/

4、 点击Generate生成Makefile

(1)如果你现在make,是肯定会出错的!(不修改,可能白等了至少15分钟,前车之鉴)

../../lib/libopencv_core.so: undefined reference to `pthread_spin_init‘

../../lib/libopencv_core.so: undefined reference to `pthread_spin_unlock‘

../../lib/libopencv_core.so: undefined reference to `pthread_spin_lock‘

../../lib/libopencv_core.so: undefined reference to `pthread_spin_destroy‘

../../lib/libopencv_core.so: undefined reference to `pthread_once‘

../../lib/libopencv_core.so: undefined reference to `clock_gettime‘

../../lib/libopencv_core.so: undefined reference to `pthread_spin_trylock‘

原因是找不到pthread链接库,打开文件夹下的CmakeCache.txt进行修改

//Flags used by the linker.(大概在194行附近)

CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt  

(2)  opencv编译OPENEXR时要用到libImath.so,

在配置界面要把build_opencvxr和with_opencvxr去掉,否则会出现这个问题。

/usr/lib/libImath.so: could not read symbols: File in wrong format

collect2: ld returned 1 exit status

make[2]: *** [lib/libopencv_highgui.so] 错误 1

make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] 错误 2 make: *** [all] 错误 2

还要去掉build_opencv_ocl和with_opencl,否则会出下面的错误

../../lib/libopencv_ocl.so:undefined reference to ‘dlopen‘

还要去掉tiff库的编译

5、make

6、sudo make install

3、测试opencv库是否安装正确

#include "cv.h"
#include"highgui.h"
const char*picture = "lena.jpg";
int main(int argc,char** argv)
{
	IplImage *pImage=cvLoadImage(picture,1);
	cvNamedWindow("Test",CV_WINDOW_AUTOSIZE);
	cvShowImage("Test",pImage);
	cvWaitKey(0);
	cvReleaseImage(&pImage);
	cvDestroyWindow("Test");
}
all:test
CFLAGS=-Wall
OPENCV_INCLUDE=-I /usr/local/arm/include/opencv
CC = arm-linux-g++
OPENCV_LINK =-L/usr/local/arm/lib -lcv -lcxcore -lhighgui -lpthread -lrt
%:%.cpp
#$(CC) `pkg-config opencv --libs` $(OPENCV_INCLUDE) $< -o [email protected] $(OPENCV_LINK)
	$(CC) $(OPENCV_INCLUDE) $< -o [email protected] $(OPENCV_LINK)
.PHONY:clean
clean:
	rm -f test

4、移植到mini2440开发板上

首先复制主机/usr/local/arm/lib//下面的全部.so文件到嵌入式根文件系统的/lib/目录下,再复制我们编译的test到嵌入式系统/opt/myworks/目录下(并确保文件test属性为可执行),如果test可正常运行没有报告缺少库文件,说明我们编译的arm-linux版OpenCV库已经可以正常使用。

时间: 2024-09-30 16:41:08

Opencv-2.49在mini2440上的移植的相关文章

opencv在arm和x86上的移植

一.开发环境 操作系统:fedora14 Opencv版本:2.0 Qt版本:4.7 arm:mini6410 交叉编译工具:arm-linux-gcc-4.5.1 二.安装与配置 Linux系统的安装,交叉Qt-creator的安装还有交叉编译工具的安装,网上说的基本都没什么问题,测试后都可以用.这里安装Qt-Creator遇到了一点小问题,按照网上的和mini6410开发手册上的安装方法太复杂了,用QtSdk-offline-linux-x86-v1.2.1.run安装方便又准确. 这篇文章

rtems在mini2440上的移植(ubuntu)

第一步 建立编译环境,rtems的编译环境需要使用newlib的库,所以ubuntu自带的gcc是不可以的,我是参照下面的博客才编译成功的,之前走了好多弯路. http://blog.sina.com.cn/s/blog_70dd169101013d4c.htm 第二步 编译rtems,我使用的是4.10.2,而参照的博客使用的是4.11(博客有些地方不清楚的看下面的博客),区别应该是有的,不过都能成功烧写. fishOnFly的http://blog.csdn.net/wuhzossibili

Telnet在mini2440上的移植

mini2440 内核以及根文件系统分别是通过tftp.NF方式加载的,为了解决开发板串口不够用的问题,给开发板安装一个telnet是一个不错的解决方案,毕竟如果用超级终端是必须占用一个串口的. 1.进入busybox源代码目录,选择telnet,telnetd(默认也是支持的) 然后make;make install 2.制作根文件系统 下面标红的就是需要自己添加进去的(etc/init.d/rcS) 还有需要注意,pts/0表示可以同时开一个telnet端口登录,如果需要多个人同时登录,则需

opencv在64位4418上的移植

1.mkdir build 2.cmake-gui 操作系统写Linux 去掉 去掉WITH_CUDA 去掉WITH_GTK 去掉WITH_1394 去掉WITH_GSTREAMER 去掉WITH_LIBV4L(后边有v4l这个没用不要选) 去掉WITH_TIFF 去掉BUILD_OPENEXR 去掉WITH_OPENEXR 去掉BUILD_opencv_ocl 去掉WITH_OPENCL 3.修改CMakeCache.txt  CMAKE_EXE_LINKER_FLAGS:STRING=-lp

成功在mini2440上移植ffmpeg ----fwqlzz love is for ever

在mini2440上,整个移植过程分三个步骤:(1)编译x264:(2)编译ffmpeg:(3)移植成功后,进行测试,即使用ffmpeg录像. (1)编译x264 官网上下了个最新的x264,地址http://www.videolan.org/developers/x264.html.我下载的文件是last_x264.tar.bz2. 120版本地址 http://pan.baidu.com/s/1jG81TSq 解压命令为#tar  -jxv  -f  last_x264.tar.bz2,

SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)

由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件架构的思想,感觉linux SPI驱动很强大,水很深,废话少说,SPI总线上有两类设备:一类是主机端,通常作为SOC系统的一个子模块出现,比如很多嵌入式MPU中都常常包含SPI模块.一类是从机被控端,例如一些SPI接口的Flash.传感器等等.主机端是SPI总线的控制者,通过使用SPI协议主动发起S

基于mini2440的Qt移植

花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程. 移植环境: win7系统,虚拟机是ubuntu12.04 友善之臂mini2440开发板 Qt版本:4.8.6   交叉编译器版本:4.4.3 一.虚拟机Qt开发环境的搭建 1.上Qt的官网下载Qt的源码包:http://qt-project.org/downloads,下载版本是4.8.6,也可以下载其他的版本 2.安装Qt所需要支持的文件 sudo a

ORB_SLAM2在Android上的移植过程

作者:Frank 转载请注明出处 一直没时间写博客,最近抽时间写了些关于在ORB_SLAM2在Android上的移植过程,也算是点经验吧. 写完后一个手贱点了个链接,瞬间1/3工作量没了,深夜弄完也是醉了... 正文开始 这篇博客讲述如何在Android平台上移植ORB_SLAM2,讲述过程包括基本的Android环境的搭建和NDK环境的配置,Android下移植的基本概念,ORB的具体移植步骤等. Android平台搭建和NDK环境配置 系统:windows7 32bit IDE:Eclips

uCOS 在 NIOS II 上的移植

工具:Quartus II 器件:EP4CE15F17C8 1.File->New Project Wizard: 2.点击两个Next,进入Family&Device Settings,选择器件 3.Finish,建立工程完毕,点击Tools->SOPC Builder,输入名字后,OK 4.修改clk_0为100MHz 5.component library中搜索nios,双击Nios II Processer 6.Finish 7.搜索epcs,双击epcs Serial...F