这是我以前做的一个项目经历,虽然是个不太大的项目,但感觉做完这个项目收获不少知识,

过程中也解决可一些这样那样的问题,也走过一些弯路。

回过头来就想把一些经历的一些小挫折,完成项目的一些经验分享给大家,希望能帮到大家,无论工作也好,学习也好能提高些效率。

项目简介:开发板上芯片是arm A8架构的,开发板连接摄像头,连接一个8寸显示屏。连接上摄像头,点开应用程序,会看到一个四格窗口界面,窗口显示视频画面等

窗口用QT来画,图像识别需要调用openCV的库函数。还要用到TCP/UDP协议传输图片。

开发环境:

Intel x86主机

Ubuntu 10.04操作系统

arm开发板

源码包:

开发板自带资料 arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz

官网下载 qt-everywhere-opensource-src-4.6.2.tar.gz

官网下载 cmake-2.8.8-Linux-i386.tar.gz

官网下载 opencv-2.4.6.1.tar.gz

经验过程:

1、安装交叉编译工具

2、编译安装QT

3、编译安装openCV

4、验证程序

下面将依次介绍

1、安装交叉编译工具链

arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz放在~/Tiny210/Linux 目录下

$cd ~/Tiny210/Linux

$  tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz

执行命令将在当前路径出现新目录 opt/FriendlyARM/toolschain/4.5.1

执行sudo mkdir /usr/local/arm

sudo mv /home/archermind/opt/FriendlyARM/toolschain/4.5.1 /usr/local/arm/ -r

修改PATH路径:

$  vi ~/.profile

在文件最后加上一行

PATH=$PATH:/usr/local/arm/4.5.1/bin

vi /root/.profile

在文件最后加上一行

PATH=$PATH:/usr/local/arm/4.5.1/bin

(/home/archermind为当前环境的主目录,根据自己的主目录具体修改)

保存退出,然后重启电脑。

在终端执行 $ arm-linux-gcc–v

会显示交叉编译的版本信息,说明安装成功。

2、编译安装QT

在qt-everywhere-opensource-src-4.6.2.tar.gz所在目录执行命令:

$  tar xvzfqt-everywhere-opensource-src-4.6.2.tar.gzC /home/archermind

$  cd /home/archermind

将会出现目录qt-everywhere-opensource-src-4.6.2

$  cdqt-everywhere-opensource-src-4.6.2

执行配置命令

$sudo ./configure -prefix /usr/local/Trolltech/qt4.6.2 -no-qvfb -embedded arm -depths 4,8,16,32 -qt-mouse-linuxtp -make libs -nomake tools -xplatform qws/linux-arm-g++ -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-glib -qt-freetype -little-endian-stl -v

$  sudo make

make过程中一般会报出各种各样的错误,且每次编译可能问题都不一样,现将我所遇到的问题及解决方案理出如下:

1

遇到problem: undefine ....

办法:在对应的MakefileLIBS后加上-lrt

2

遇到:png.h中有结构体未定义

办法:下载较新libpng包,解压到主目录中,进入该目录。

$./configure\

-hos=arm-linux\prefix=/home/archermind/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabienable-sharedenable-static

$ make

$ make install

找到包中的pngconf.h  png.h,复制到指定include目录中

->~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include

3

遇到:jpeghandler.cpp文件编不过时

办法:到上级目录找到jpeg.pro里面,把jpeghandler.cpp去掉。

4

遇到:某个目录下文件怎么弄也编不过时,如果该目录内容对你不重要时。

办法:找到目录上一级配置文件中删除编译这个目录,还可以利用configure选项 例如-nomake tools,这样tools目录不会再编译了。

5

遇到:Error: register or shift expression expected -- `orr r3,r2,lsl#16'

办法:这是个BUGQT里面应该先判断编译器版本的,结果人家找出来放到官网了,还好他们给出了解决方案:

http://bugreports.qt.nokia.com/browse/QTBUG-6521

To fix this issue patch /src/3rdparty/freetype/include/freetype/config/ftconfig.h Line 330.

"orr %0, %2, lsl #16/n/t" /* %0 |= %2 << 16 */

+ "orr %0, %0, %2, lsl #16/n/t" /* %0 |= %2 << 16 */

他的意思是加多一个%0%2前面,加上后编译过。

6

遇到:提示未找到命令:arm-linux-gcc

办法:由于是sudo命令,需要root用户也添加环境变量export PATH=$PATH:/usr/local/arm/3.4.1/bin

7

遇到:出现以下错误:../3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h:298:6: #error "Not supported ARM architecture"

make[1]: *** [obj/release/pcre_compile.o] 错误1

make[1]:正在离开目录`/usr/local/qt/qt-everywhere-opensource-src-4.6.3-arm/src/script'

make: *** [sub-script-make_defaulrgefile

方法:add a line in your ./configure parameters, such as "-D__ARM_ARCH_5TEJ__" , or whichever architecture definition that suits the platform.

就是在./configure参数后面增加一个"-D__ARM_ARCH_5TEJ__"

make install

遇到 权限问题

办法 sudo make

sudo make install

Make完毕之后,执行:

$ sudo make install

结束后会在/usr/local/ Trolltech/qt4.6.2目录中生成QT文件。

$ sudo cp /usr/local/Trolltech/qt4.6.2/include/*~/Tiny210/Linux/opt/FriendlyARM/toolschain/

4.5.1/arm-none-linux-gnueabi/include/

$ sudo cp /usr/local/Trolltech/qt4.6.2/ib/*~/Tiny210/Linux/opt/FriendlyARM/toolschain/

4.5.1/arm-none-linux-gnueabi/lib/

(拷贝QT头文件和库文件,是为了编译opencv做准备)

3、编译安装openCV

终端进入cmake-2.8.8-Linux-i386.tar.gz所在目录,执行:

$ tar xvzfcmake-2.8.8-Linux-i386.tar.gzC /home/archermind

执行后会出现 /home/archermind/cmake-2.8.11.2-Linux-i386目录

终端进入opencv-2.4.6.1.tar.gz所在目录,执行:

$tar xvzfopencv-2.4.6.1.tar.gzC /home/archermind

执行后会出现/home/archermind/opencv-2.4.6.1目录

$ cd/home/archermind/opencv-2.4.6.1

$ mkdirr build

$ /home/archermind/cmake-2.8.11.2-Linux-i386/bin/cmake-gui

执行后会出现cmake配置图形界面。

在窗口化界面中

选择源码目录/home/archermind/opencv-2.4.6.1

选择build目录/home/archermind/opencv-2.4.6.1/build

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

Operating System填写arm-linux

C compilers 填写~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linuc-gcc

C++comilers填写~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linuc-g++

ROOT Target 填写/usr/local/Trolltech/qt4.6.2

(如果不编QT一般添~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1)

点击Finish

默认安装路径为 /usr/local,点击Generate生成Makefile

在图形框主目录找到WITH_QT打钩,WITH_TIFF去掉钩 ,点Configure

然后再找到新增的QT_QMAKE_EXECUTABLE选项,确保后面的路径为/usr/local/Trolltech/qt4.6.2/bin/qmake

configure,再点Generate生成MAkefile

修改~/ opencv-2.4.6.1/modules/highgui/CMakeLists.txt

找到set(highgui_srcs,然后下一行加上一行:

src/cap_v4l.cpp           //加上这个视频文件

修改~ /opencv-2.4.6.1/cmake/templates/ cvconfig.h.cmake

24行加上:#define HAVE_CAMV4L2

234行加上:#define HAVE_QT

$ cd/home/archermind/opencv-2.4.6.1/build

$ sudo make

Make过程中可能会遇到如下问题:

遇到:

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

解决方法:

修改build/CMakeCache.txtCMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除

遇到:

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'

解决方法:修改build/CMakeCache.txtWITH_TIFF:BOOL=ON,改成OFF,重新编译,错误消除

遇到:OpenCV-2.2.0/modules/ml/src/gbt.cpp:474: error: 'expl' was not declared in this scope

解决:    修改gbt.cpp14行,16行:注释掉

//#if ANDROID

#define expl(x) exp(x)

//#endif

遇到:lib/libopencv_features2d.so: undefined reference to `cv::SIFT::SIFT(double, bool, bool, int, int, int, int

解决: 在OpenCV2.2.0/modules/features2d/src/sift.cpp

#ifdef __arm__

#define ARM_NO_SIFT

#endif

注释掉#define ARM_NO_SIFT.错误消除,

遇到:/home/ubuntu-1/opencv-2.4.6.1/modules/highgui/src/window_QT.cpp: In member function 'void GuiReceiver::showImage(QString, void*)':

/home/ubuntu-1/opencv-2.4.6.1/modules/highgui/src/window_QT.cpp:953:25: error: 'class QString' has no member named 'toStdString'

解决: vi modules/highgui/src/window_QT.cpp

953       cv::imshow(name.toStdString(), im);替换为:

954       cv::imshow(qPrintable(name), im);

编译成功!

$ sudo makeinstall

安装成功!

sudo cp /usr/local/lib/*/usr/local/arm/4.5.1/arm-none-linux-gnueabi/lib/-r

哈哈,到这里即将大工告成了,下面我们就来编译一个程序试试,

程序中将会用到交叉编译器,qt库,openCV库等,如果编译运行成功

说明我们配置的环境没问题:

验证程序:

编写文件opencv_test.cpp 内容如下:

#include <cv.h>

#include <cxcore.h>

#include <highgui.h>

int main(int argc,char **argv)

{

CvCapture* capture = NULL;

IplImage* frame = NULL;

if(!(capture = cvCaptureFromCAM(-1))) //我这里写的参数是0代表dev/video0

{

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;

}

在该文件所在目录,执行命令:

$arm-linux-g++ -o opencv_test opencv_test.cpp -I /usr/local/include -L /usr/local/lib

-lopencv_core -lopencv_highgui -lpthread –lrt

生成的程序opencv_test,用命令$readelf -h opencv_test 看看是不是arm执行的程序。

在开发板执行opencv-qt程序时,需要把QT所有lib库和opencv所有lib库,复制到开发板/lib/下。

QT+opencv环境搭建相关推荐

  1. 使用飞凌嵌入式IMX6UL-C1板子——qt+opencv环境搭建

    使用飞凌嵌入式IMX6UL-C1板子--qt+opencv环境搭建 准备工作: Ubuntu18.04虚拟机环境 飞凌官方提供的qt-tslib库,gcc交叉编译器,opencv源码库,qt源码,具体 ...

  2. OpenCV图像处理--Qt+OpenCV环境搭建

    LinuxQt+Opencv 环境搭建参照 LinuxQT+第三方库配置 WindowsQt+OpenCV环境搭建 一.下载opencv环境 opencv环境下载 2.Qt+OpenCV环境测试 新建 ...

  3. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果

    OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实现一些属于DeepLe ...

  4. 基于 C++ 和 Python 的 OpenCV 环境搭建

    目录 Ⅰ.VS 中基于 C++ 的 OpenCV 环境搭建(编译源码 cmake + opencv 4.2.0 + opencv_contrib 4.2.0) 1-1. 安装 cmake 1-2. 使 ...

  5. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  6. OpenCV环境搭建(一)

    OpenCV环境搭建 环境搭建为OpenCV的python(一下简称py)开发环境搭建,建立在py3的环境和语法上实现的. windows系统搭建 系统环境:windows 10 + python 3 ...

  7. 嵌入式Qt开发环境搭建

    嵌入式Qt开发环境搭建 系统基础环境 系统更新 sudo apt update sudo apt upgrade sudo apt autoremove 安装常用软件 # 安装vim sudo apt ...

  8. iMX6 yocto平台QT交叉编译环境搭建

    1.安装ubuntu上必备的库文件: 如果无法安装请依次执行以下两个命令: apt-get upgrade apt-get update 再安装以上的库文件. 2.搭建JDK开发环境 下载jdk1.6 ...

  9. i.MX平台Qt交叉编译环境搭建

    主机环境:Ubuntu 12.04, 64位 . 交叉编译工具:Poky 1.5.3 交叉编译工具链及相关工具 1.安装交叉编译工具 将 poky 交叉编译工具压缩包解压到 /opt 目录. $ su ...

最新文章

  1. Oracle定时执行存储过程
  2. 科研文献|了解多个含水层中微生物砷的迁移:DNA 和 RNA 分析的见解
  3. hdoj Last non-zero Digit in N! 【数论】
  4. 模块-基本概念和import导入复习
  5. UESTC 288 青蛙的约会 扩展GCD
  6. msp430和stm32 dht11驱动程序
  7. [抽奖系统下载]多进程现场抽奖展示系统V2-双屏PPT版-专业抽奖展示工具-具有强劲引擎的抽奖系统-PPT双屏技术深度应用,国内唯一
  8. 三角网导线平差实例_三角网闭合导线平差计算表0
  9. c# word 增加段落_word排版技巧:如何防止行距随字号而改变?
  10. ubuntu 安装pyqt IDE使用eric 辛酸史
  11. vyos in or out 限流量
  12. CISP可以自己报名考试吗?
  13. Mac查看电池健康情况、电池损耗的方法
  14. C/C++编程:std::move(将左值强制转换为右值)
  15. 2021年美容师(初级)报名考试及美容师(初级)考试试卷
  16. Python基本数据类型大集合
  17. 记一次小米路由器任意文件读取漏洞
  18. cruisecontrol 配置
  19. 借CT阵营之力NFV让运营商网络变得更美
  20. DEJA_VU3D - Cesium功能集 之 083-Cesium热力图实现完整版

热门文章

  1. YGG SEA与Solana Ventures达成合作,为东南亚的游戏开发注入活力
  2. 小白搭建个人网站最详细的全过程
  3. L1-057 PTA使我精神焕发 - java
  4. PCB焊接温度和方法
  5. 丢包、拆包、粘包的原因及解决办法
  6. kettle基本概念
  7. VC字符串与时间戳相互转换
  8. Amazon s3使用Cloudberry Explorer工具管理和访问
  9. Bert模型学习之句向量的简单应用
  10. 【优化】windows双网叠加 多网叠加 网速叠加 教程