移植Opencv到Arm开发板中

折腾了许久,终于把opencv给移植到了arm中,也在网上找了许多教程,在自己移植过程中也遇到了许多问题,下面是自己移植的方法,经过测试确实能用。

首先介绍一下环境: 电脑上装的是ubuntu14.04,开发板是Tiny4412,交叉编译器版本是友善之臂公司提供的arm-linux-gcc4.5.1,opencv版本用的是2.0.0。

(这里有一个问题一直没有解决,下载过很多不同版本的opencv,只有2.0.0版本移植成功了,其他更高版本的opencv在编译程序的时候都会出现

 "warning: ../../lib/libopencv_core.so, needed by /usr/local/arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)"

 这种问题,看意思是说找不到相应的.so动态库文件,可是该目录下明明已经有了,郁闷,如果有朋友知道这个问题的解决办法麻烦告诉一下,谢谢

solution: 这个问题可能是因为环境变量中LD_LIBRARY_PATH的问题,需要把LD_LIBRARY_PATH的值设置为.so动态库文件的路径。可以用echo $LD_LIBRARY_PATH查看。


另外,我的交叉编译工具安装目录位于: /opt/FriendlyArm//toolschain/4.5.1.

1. configure的配置,生成makefile

解压opencv2.0.0后,进入opencv目录,我的目录是:/home/lipengxiang/Opencv/opencv-2.0.0

# cd /home/lipengxiang/Opencv/opencv-2.0.0

下面的命令是configure的配置信息:  

#./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg 

--without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=

-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include LDFLAGS=

-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib --with-v4l2 --prefix=/opt/arm/opencv 

--libdir=/opt/arm/opencv/lib -includedir=/opt/arm/opencv/include

命令的意思也很好懂,注意一下就是CPPFLAGS= 后面的“-I” 是 i (哎)的大写,还有--prefix 就是opencv的安装目录。

2. 交叉编译opencv

# make

编译的过程中可能会出现一些错误,不要着急,仔细看一下报错的内容,再上网搜一下都很容易解决的。

一般遇到的比较多的问题是 :

Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'

原因是cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项。

此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt (有可能还要加上-dl,看具体情况了,最好是加上) 。可以使用命令:

# sudo nano CMakeCache.txt

如下图:

3. 安装

#sudo make install

因为要安装到/opt目录下面,所以需要用到sudo命令。 这样的话/opt/arm/opencv 目录下面就会生成很多文件了。到这里opencv的编译和安装过程也就结束了。

4. 测试

#arm-linux-gcc   test.c -o test-arm  -I/opt/arm/opencv/include/opencv  -L/opt/arm/opencv/lib -lml -lcvaux -lhighgui -lcv -lcxcore  -lpthread -lrt 

注意命令前面是大写的i和小写的l别弄混了。 这里编译程序时需要指定包含的头文件和库的路径,如果编译没有报错说明就没有问题了。下面将编译生成的可执行文件test-arm和动态库文件 libml.so, libcvaux.so, libhighgui.so, libcv.so, libcxcore.so 分别复制到开发板的/usr和/lib 目录中,然后再开发板上运行程序就大功告成了。

(这里从电脑上复制文件到开发板中可以使用命令:scp ,前提是电脑和开发板的网线连接在同一个路由器中,

   例如:scp test-arm @192.168.1.102:/usr)

5. 问题

这里还有一个问题,虽然opencv移植到了开发板中,但是运行程序仍然会出现报错:

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /forlinx/OpenCV-2.3.1/modules/highgui/src/window.cpp, line 275

这个问题是由于开发板中没有可以用于图像显示界面的库,比如GTK等等。可以通过安装GTK或者使用QT来显示图像解决这个问题。

你可能感兴趣的:(移植Opencv到Arm开发板中)