Linux下交叉编译OpenCv

通过近一周的时候终于成功交叉编译opencv成功了,真心不容易。有一句话乃真理也,凡事贵在坚持。过程总是痛苦的,因为不懂得很多问题但是又需要面对很多问题,最大的收获就是耐心解决所有问题后就懂得这些了。

1.为什么要交叉编译opencv?

之前比较天真,以为在Ubuntu上安装好opencv后,如果gcc通过编译,那么就直接arm-linux-g++嘛,事实证明我真的很天真。

之所以要交叉编译opencv,是因为在编译的时候,gcc和arm-linux-gcc所需要调用的库是不一样的,尽管名字是一样的。至于为什么,我猜应该是编译出来的可执行文件是在不同环境下运行的,所以编译的时候要链接的库当然不能是一样的。

2.为什么选择opencv2.3.1

说实话挺艰辛的,从opencv2.4.10到opencv2.4.9再到opencv1.0,这三个版本都未能成功交叉编译,后来只好继续尝试,终于在第四个版本opencv2.3.1成功了。贵在坚持。

一、开发环境

宿主机Ubuntu12.04

交叉编译器:arm-linux-gcc4.5.1(友善之臂)

cmake-2.8.7-Linux-i386.sh

二、编译opencv

1.解压

解压opencv2.3.1到任意目录下,我的压缩包本来放在/home/ljy-linux/下,直接解压

#tar jxvf OpenCV-2.3.1a.tar.bz

2.进入源目录并修改

为什么要修改,因为安装的时候会出错所以直接先修改了

修改OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h文件第63行的源码:将absl()修改为abs()

#cd OpenCV-2.3.1/modules/flann/include/opencv2/flann/

#vi dist.h

修改完之后保存

3.运行cmake-gui

运行之前先建两个目录

#cd /usr/local

#mkdir arm

#mkdir opencv-arm

目录arm用来安装opencv,opencv-arm则作为交叉编译的工作目录

#cmake-gui

选择源代码目录:/home/ljy-linux/OpenCV-2.3.1

选择Build目录:/usr/local/opencv-arm/

点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next
Operating System填写arm-inux
C Compilers填写/usr/local/arm/FriendlyARM/4.5.1/bin/arm-linux-gcc
C++ Compilers填写/usr/local/arm/ FriendlyARM/4.5.1/bin/arm-linux-g++
程序库的Target Root填写/usr/local/arm/ FriendlyARM/4.5.1/,然后点击Finish

修改默认配置,默认安装目录为/usr/local,把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm/
去掉WITH_TIFF(如果不需要的话一定要勾选掉)

再次点击Configure

然后点击Generate生成Makefile

4.编译和安装

编译之前,修改一下CMakeCache.txt。

#cd  /usr/local/opencv-arm

#vi CMakeCache.txt

CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt

开始编译

#make

完全编译完成后安装

#make install

5. 写个简单的测试程序,打开摄像头并创建一个窗口显示

// test.cpp

#include <cv.h>

#include <cxcore.h>

#include <highgui.h>

int main()

{

CvCapture* capture = NULL;

IplImage* frame = NULL;

if( !(capture = cvCaptureFromCAM(-1)))

{

fprintf(stderr, "Can not open camera./n");

return -1;

}

cvNamedWindow("video", 1);

while(frame = cvQueryFrame( capture ) )

{

cvShowImage("video", frame);

}

cvDestroyWindow("video");

cvReleaseCapture(&capture);

return 0;

}

6.编译连接测试程序

arm-linux-g++ -I /usr/local/arm/include/opencv/ -L /usr/local/arm/lib//libopencv_imgproc.so -L /usr/local/arm/lib//libopencv_core.so -L /usr/local/arm/lib//libopencv_flann.so  -L /usr/local/arm/lib//libopencv_highgui.so  -L /usr/local/arm/lib//libopencv_ml.so -lpthread -lrt -o test test.cpp

似乎有些警告,先忽略了。

7.放到arm上运行

  放到板上运行之前要先把之前编译好的库文件放到板子上面。

  原本是在板子上面创建同样的路径,后来发现运行不了,提示找不到库文件,后来想想直接把lib下的所有.so文件放到了根目录的/lib下,再次运行,成功了。

  类似的,应该只要把编译好的库文件一起放在arm板上的系统库文件中就可以了。

8.成功只是一半的

  运行是成功的,编译好了的库也被成功调用了,但是arm板提示说缺少界面的创建,大概就是这个意思,所以还需要一些界面来打开窗口等等,可以使用qt等。因为友善之臂arm板的界面是用qt写的,所以接下来学习一下qt的编程然后加上OpenCv再在arm板上打开摄像头并显示出来。

时间: 2024-10-13 12:05:09

Linux下交叉编译OpenCv的相关文章

如何配置linux下的opencv

方法一: 搜索当前的linux下的opencv支持的版本,我的是14.04为2.3版本. $ apt-cache search opencv 安装下面三个,用来运行OpenCV程序: apt-get install libcv2.3 libcvaux2.3libhighgui2.3 使用OpenCV来编写程序: apt-get install libcv-dev libcvaux-devlibhighgui-dev 方法二: 在Ubuntu的软件中心中有opencv的安装包,可以点击相应的安装包

linux下交叉编译libcurl

linux下交叉编译libcurl: ./configure --prefix=/usr/local/arm-2014.05/lib/ CC=/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc --host=arm-linux --disable-shared --enable-static --without-libidn --enable-ssl --without-librtmp --without-gnutls --without-

Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件

交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gdb-7.2.tar.bz2 这个文件为例.2.解压缩: $ tar jxvf gdb-7.2.tar.bz2 注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的: xf(v),前者再加上j选项,后者再加上z选项. 3.进入该目录 $ cd g

Linux下编译opencv库[转]

下载源码 从http://sourceforge.net/projects/opencvlibrary 下载OpenCV源码,下载文件为opencv-1.0.0.tar.gz(如果是其他版本,文件名相应改变,建议下载当时最新的版本). [编辑] 解压文件 tar zxvf opencv-1.0.0.tar.gz cd opencv-1.0.0 [编辑] 检查软件配置 $./configure checking build system type... i686-pc-linux-gnu chec

linux下QT+OPENCV的摄像头调试出错

论坛的大侠们,小弟最近遇到一个困惑,初学QT就出现这样的问题,所以顶着被人骂的风险,过来求教,先谢谢哈!问题如下 11:12:27: Running steps for project OpencvCamera...11:12:27: Configuration unchanged, skipping qmake step.11:12:27: Starting: "/usr/bin/make" -wmake: Entering directory `/home/tl/qt/qt_pro

【转】linux下安装opencv

Installation in Linux These steps have been tested for Ubuntu 10.04 but should work with other distros as well. Required Packages GCC 4.4.x or later CMake 2.8.7 or higher Git GTK+2.x or higher, including headers (libgtk2.0-dev) pkg-config Python 2.6

在Linux下配置OpenCV jar

这几天在用java做一个图像处理的东西.自己是按着这个Guide来的(点我点我),上面后面的教程中用到了OpenCV,于是我就着手搭建这个环境了. 我找到了一个opencv的jar包,然后把jar包放到了我的项目里面.然后拷贝了一段demo代码.demo中一句这样的代码 System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); 这句的功能是加载一个native的库,其中NATIVE_LIBRARY_NMAE的值为opencv_java310.说白了对于Lin

linux下编译opencv

1.安装cmake:sudo apt-get install cmake 2.下载opencv-2.4.10.zip,解压 3.编译opencv cd /home/opencv-2.4.10 mkdir build cd build/ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 4.结束后输入sudo make 5.然后在输入sudo make install 6.这样就编译完成了,你可以在usr

Linux下安装opencv with-ffmpeg解决无法读取视频的问题

1. 编译安装ffmpeg 下载源码,执行 ./configure --disable-yasm --enbale-shared --prefix=/usr/local/ffmpeg 即可. 2. 下载opencv并设置config 下载源码,并 git checkout 3.1.0,也可以是其他版本 cmake -D WITH_CUDA=OFF -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/packages/opencv/i