linux +qt4.7+opencv2.2移植到tq2440开发板
2022-05-30 来源:eefocus
以下操作在Fedora下使用超级用户进行 我已经安装了交叉编译器arm-linux-gcc 4.3.3和qt4.5的x86和arm版本 在目录/opt/EmbedSky下。
修改配置文件/etc/profile 添加
pathmunge /opt/EmbedSky/4.3.3/bin
安装CMake
OpenCV 2.1的版本,必须使用CMake创建Makefile。我使用的CMake版本是2.6-Linux-i386的,是fedora通过软件添加和载卸功能添加的(这个cmake要重新安装,而且要添加bin进去路径)
编译OpenCV:
1、解压OpenCV 2.1到/opt/EmbedSky/OpenCV-2.1.0目录下
2、在超级用户下,运行cmake-gui命令
选择源代码目录:/opt/EmbedSky/OpenCV-2.1.0
选择Build目录:/home/pww71/opencv-arm/
点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next
Operating System填写arm-inux
C Compilers选择/opt/EmbedSky/4.3.3/bin/arm-linux-gcc
C++ Compilers选择/opt/EmbedSky/4.3.3/bin/arm-linux-g++
程序库的Target Root填写/opt/EmbedSky/4.3.3/,然后点击Finish
修改默认配置,
X86-opencv的cmake配置 添加BUILD_EXAMPLES 和 OPENCV_BUILD_3RDPARTY_LIBS 前面的日志已经介绍过了
arm-opencv的cmake配置 不要加BUILD_EXAMPLES 和 OPENCV_BUILD_3RDPARTY_LIBS 和 去掉 WITH_TIFF
CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt
x86的opencv默认安装目录为/usr/local,对于arm的交叉编译的库来说并不合适,所以把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm/lib/opencv/
没有安装tiff图像的支持,去掉WITH_TIFF
点击Generate生成Makefile
3、使用超级用户 进入目录/home/pww71/opencv-arm,运行make编译opencv
4、运行make install,将opencv生成的库和头文件安装到目录/usr/local/arm/lib/opencv/
QT的配置 已经解压和安装了qt4.5的x86的库和arm交叉交叉编译的库
安装qtcreator时 记得安装地址 并且修改配置文件/etc/profile 添加上qtcreator的安装地址的bin目录 我的是pathmunge pathmunge /opt/EmbedSky/qtcreator-1.3.0/bin
为了能找到qmake 还要添加路径
pathmunge /opt/EmbedSky/qt-4.5/_install/x86/bin
pathmunge /opt/EmbedSky/qt-4.5/_install/am/bin
到配置文件/etc/profile中
使用超级用户 输入命令source /etc/profile 后 再执行qtcreator命令 打开Qtcreator界面
进入Tools-Options左侧选择QT4-Qt Versions 右侧选项里:如果通过软件添加和载卸工具添加了qt4的话 Auto-detected会自动的选择Qt in PATH /usr/local/bin/qmake-qt4 用这个qmake工具生成的可执行文件不用添加-qws命令行参数
自己安装的qt4.5 我是如下配置
Qt in PATH /opt/EmbedSky/qt-4.5/_install/arm/bin/qmake
添加Manual x86-qt-4.5.0 /opt/EmbedSky/qt-4.5/_install/x86/bin/qmake
生成的可执行文件需要添加-qws命令行参数
分别点击rebuild 最后点击ok
Build Settings 中根据需要Add刚才配置的选择
BUild configuration for ... 也选择相应的选项
在QT工程文件.Pro中添加以下内容
INCLUDEPATH += /usr/local/include/opencv
LIBS += /usr/local/lib/libcv.so
/usr/local/lib/libcvaux.so
/usr/local/lib/libcxcore.so
/usr/local/lib/libhighgui.so
/usr/local/lib/libml.so
pc仿真必须将以上库还要添加到项目文件夹里
如果是arm开发板的程序则添加以下内容
INCLUDEPATH += /usr/local/arm/lib/opencv/include/opencv
LIBS += /usr/local/arm/lib/opencv/lib/libcv.so
/usr/local/arm/lib/opencv/lib/libcvaux.so
/usr/local/arm/lib/opencv/lib/libcxcore.so
/usr/local/arm/lib/opencv/lib/libhighgui.so
/usr/local/arm/lib/opencv/lib/libml.so
编译生成可执行文件 移植到开发板 提示缺少什么库就按提示添加相应的图像库到lib中 以及qt4.5的库 和字体都添加到相应的目录中 中间有一个这个提示
QWSDisplay::Data::init: Invalid argument
Client can't attach to main ram memory.
Aborted
这个是表示缺少命令行参数-qws 是Qt4的问题 运行命令添加该参数 ok一切正常
注意的是qtcreator。bin不能用于pc的编程 总是提示找不到opencv图像库
系统自带的qt适合pc编程 如果提示无法保存文件 可以用系统管理登录 chmod文件属性
自己安装的qt 只能用于arm的交叉编译
在安装qt4.7的过程中 又发现pc版本总是提示找不到opencv图像库 后来卸载了qt4.5和qt3,来回重装qt4.7又可以了 然后马上保存的系统。
******pc编程如果带opencv库 会提示找不到库文件。
pc的编译器换成交叉编译时 先运行qmake生成make文件 直接运行rebuilt不行 会提示opencv的库文件格式错误。
Qt creator 添加qmake rebuild出错
[日期:2011-04-23] | 来源:Linux社区 作者:c05170519 |
在Qt creater-->tools-->Qptios-->Qt4-->Qt Versions中添加qmake(qt embeddedd版的),然后Rebuild Degugging
helper的时候(就是把那个红x变成绿勾)的时候出现下面的错误:
Building debugging helper library in /QT/qte-4.5.0/qtc-debugging-helper/
Running /usr/bin/make distclean...
rm -f gdbmacros.o
rm -f *~ core *.core
rm -f libgdbmacros.so.1.0.0
rm -f libgdbmacros.so libgdbmacros.so.1 libgdbmacros.so.1.0 libgdbmacros.a
rm -f Makefile
Running /QT/qte-4.5.0/bin/qmake ...
Cannot find file: .
Running /usr/bin/make ...
arm-linux-g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DUSE_QT_GUI=1 -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../mkspecs/qws/linux-arm-g++ -I. -I../include/QtCore -I../include/QtGui -I../include -I. -I. -o gdbmacros.o gdbmacros.cpp
make: arm-linux-g++:命令未找到
make: *** [gdbmacros.o] 错误 127
最后两行还是乱码,百度google无解。
具体怎么找出毛病的忘了,只记得好像上面把qmake添加进环境变量时,如果写进/etc/bash.bashrc,auto-detect是找不到它的,于是对/etc/profle和/etc/bash.bashrc这两个文件产生好奇,一问老师才知道,前者是全局的,对整个系统都有作用的,而后者只对终端起作用,而我的qmake虽然写的是/etc/profile,但是交叉编译器却写进/etc/bash,bashrc(图省事,修改profile要重启电脑,后者只要source以下就可以了),rebuild时需要调用相关的交叉编译器,写在/etc/bash,bashrc的话编译器就找不到了,所以会出错。
- 学习ARM开发(2)
- Linux帧缓冲设备驱动程序框架及图形界面GUI的移植
- Linux Kernel之flush_cache_all在ARM平台下是如何实现的
- 手把手教你写Linux设备驱动---中断(三)--workqueue实现(基于友善之臂4412开发板)
- makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解
- Ubuntu下安装arm-linux-gnueabi-xxx编译器
- 用Qemu运行/调试arm linux
- Linux内核异常处理体系结构详解(一)
- arm linux 移植 mtd-utils 1.x
- 基于gnu-arm-linux的LPC2220的简单工程模板