嵌入式成长轨迹63 【智能家居项目】【ARM 飞凌ok6410】【ARM QT 移植环境搭建问题集锦】
推荐阅读顺序:
基本环境搭建:
【配置】在虚拟机Ubuntu下NFS网络文件系统建立
《ok6410 Qt移植百科全书》
【配置】QT&QWT&sqlite3安装配置
这中间出现问题可查阅
【调试】ARM QT 移植环境搭建问题---补充《ok6410 Qt移植百科全书》
日常使用:
【配置】将PC端QT代码修改为ARM端可用
【配置】SD卡一键烧写
这中间出现问题可查阅:
【调试】智能家居代码移植时环境调试问题集锦
Version 2012.12.6
调试者 |
郑子木 |
Tslib1.4的编译 用于编译触控模块。自己的虚拟机上需要有这个。但如果板子文件系统/usr/local里边已经有tslib了,那可以不用再移动进去——这里编译的tslib是给Qtopia4.4.3用的,如果换成4.4.3打开不了触控的话,也可先用2.2.0系统打开,过了触控调试之后再给4.4.3把配置拷贝上.或者使用飞凌自带的校准脚本,使用方法在里边有提及
Qtopia4.4.3、Qtopia2.2.0的编译 用于板子内系统界面。同时可提供相应的版本库。如果不用4.4.3和2.2.0的话,可以不编译
Qt/E4.7的编译 这个还是要在虚拟机上布置,编译时间也会比较长,大概2、3小时
最初问题A描述 |
配置安装参数 root@ubuntu:~/Desktop/tslib/tslib# ./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no PLUGIN_DIR=/usr/local/arm/tslib/plugins -prefix=/usr/local/arm/tslib/build -host=arm-linux --cache-file=arm-linux.cache 2>&1 | tee conf_log
发生错误 configure: WARNING: unrecognized options: --enable-inputapi configure: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used configure: loading cache arm-linux.cache checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes …… configure: WARNING: unrecognized options: --enable-inputapi
|
A原因分析//包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
书里边的参数不正确 |
A解决步骤 //简单的可以多步骤一起列在下面 |
将 --enable-inputapi=no 改为 --enable-input=no 错误消除 |
A后状况B描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
make[1]: g++: Command not found make[1]: *** [project.o] Error 127 configure exited with value 2 at /witech/qt-extended-4.4.3/src/build/bin/configure line 5215 main::bootstrap_qt() called at /witech/qt-extended-4.4.3/src/build/bin/configure line 1784 make: *** [src/build/mkconf/configure] Error 2 ./build: line 53: bin/qbuild: No such file or directory ./build: line 54: bin/qbuild: No such file or directory
|
B原因分析 |
g++没有安装 |
B解决步骤 |
安装g++ |
B后状况C描述 |
在编译qt-extended-4.4.3的config阶段,出现以下错误后退出: Checking the compiler (host): OK (GCC 4, Little Endian) Checking the compiler (target): FAIL Note: Run configure -verbose for verbose errors make: *** [src/build/mkconf/configure] Error 1
|
C原因分析 //包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
这表明你的编译器安装的路径不对或者没有在PATH中添加! |
C解决步骤 //简单的可以多步骤一起列在下面 |
用arm-linux-gcc -v查看正确的交叉编译器安装路径,输出的文本中有一项是: --prefix=/usr/local/arm/4.1.2 表示,你的交叉编译正确的安装路径是/usr/local/arm/4.1.2 应该把/usr/local/arm/4.1.2/bin加入到PATH环境变量中去!
修改环境变量,把交叉编译器的路径加入到PATH。 (虚拟机/主机)方法一: 修改/etc/bash.bashrc文件 #vim /etc/bash.bashrc 在最后加上: export PATH=$PATH:/usr/local/arm/3.4.1/bin (注意修改版本、、、) export PATH
(开发板)方法二: 修改/etc/profile文件: # vim /etc/profile 增加路径设置,在末尾添加如下,保存/etc/profile文件: export PATH=$PATH:/usr/local/arm/3.4.1/bin
方法三: #export PATH=$PATH:/usr/local/arm/3.4.1/bin 注:(这只能在当前的终端下才是有效的!)
立即使新的环境变量生效,不用重启电脑: 对应方法一:#source /root/.bashrc 对应方法二:# source /etc/profile
检查是否将路径加入到PATH: # echo $PATH 显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。
测试交叉编译命令和工具版本 # arm-linux-gcc -v
至此,交叉编译环境安装完成。
|
C后状况D描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
bash: export: `PATH=/usr/local/arm/4.3.2/bin:……': not a valid identifier
|
D原因分析 |
当在shell编辑脚本时,运行时出现了" ‘: not a valid identifier ",或者会出现(: command not found,许多莫名其妙的符号)很可能你在windows下编辑,在Linux下运行,由于Linux和windows的文本格式不同所导致的。上面可能是反应之一,有时终端显示" :没有文件…"也是这个原因造成的 大部分由分号开头":"
|
D解决步骤 |
只要用UltraEdit工具转换成Linux格式,重新source运行无错误即可; 或者还是老老实实在linux下打一遍吧、、
|
D后状况E描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
当在windows下的多用户(例如在一个用户里安装程序,而在另一个用户里使用),或虚拟机中的Linux下也出现过这样的情况,就是安装完Qt Creator后运行程序,出现No valid Qt version set 的问题
|
E原因分析 |
没有设置好Qt 库的路径 |
解决步骤E |
解决方法:
以下几个步骤: 1、/etc/bash.bashrc后追加设置环境变量 #qt export PATH=/opt/qt-4.7.1/bin:/opt/qt-4.7.1/lib:$PATH
2、打开上方菜单Tools->options,左边选择build and run,之后在里边将qmake、gcc添加 auto detected的就不用管了,要的话就添加 Qt Versions Qt 4.7.1 (qt-4.7.1) /opt/qt-4.7.1/bin/qmake 在QT creator版本中手动加入了编译好的ARM版本,此时提示没有工具链,左边显示为红色叹号 Tool Chains GCC-arm /usr/local/arm/4.3.2/bin/arm-linux-gcc-4.3.2 GCC /usr/bin/gcc-4.6 同时在工具链中加入/usr/local/arm/4.3.2/bin/arm-linux-g++编译器路径后,提示没有安装qmlviewer,左边显示为黄色叹号。
3、在主页面左边菜单栏project那里,开起来就在第一种build&run方式里边,将qt版本和工具链都选上(如果要在电脑上运行,就得用里边配搭的Qt4.8而不是用4.7.1)。如果无法选择,就跳到第二种,尝试manage选上各个版本和工具链使之激活,再回第一种就出现可以选择了(、、、不要问我为什么,我也是走投无路、、、也许关掉qt creator再重启也行)。选好之后退出,在主页面build,运气好此时就能成功了。
4、还不能执行 /code/Helloword/moc_dialog.cpp:16: error: #error "(The moc has changed too much.)" 如果本来有一些生成的配置文件,用make clean甚至make distclean删除,再试。 |
E后状况F描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
在Qt Creator中编译的时候 Starting /witech/Helloword/Helloword... Failed to start program. Path or permissions wrong? /witech/Helloword/Helloword exited with code -1
|
F原因分析 |
1、权限不足 2、***没有规则可以创建“XXX”需要的目标“XXX”问题 make clean 再不行就用make distclean make clean 和make distclean的区别:make clean仅仅是清除之前编译的可执行文件及配置文件。而make distclean要清除所有生成的文件。make distclean类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。 上面的问题的根源是因为,经过拿来主义的代码里面已经有配置文件,是根据原来的编译环境生成的,仅仅通过make clean并不能清楚之前的配置文件,没有清除之前的配置文件就进行编译,编译器本着相信程序员的态度,编译时不会产生新的configure生成的附带文件,而是根据原来的configure生成的文件进行编译,这样就会导致上面的一系列编译错误。make distclean可以将所有的垃圾,之前环境所有的余孽清理干净,这样就不会给编译器偷懒的机会。
|
解决步骤F |
将权限改为777,或者用make clean删除一些多余文件 |
F后状况G描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
我在linux下安装了QT之后,然后运行qmake命令为程序代码生成Makefile,没有问题,当运行make命令的时候,出现了编译错误,如下: /usr/local/Trolltech/Qt-4.7.0/bin/uic:命令未找到
|
G原因分析 |
错误的大体意思就是没有找到那个需要使用的在指定文件夹下的可执行文件uic,我到我的/usr/local目录下没有找到Trolltech这个目录,因为我安装QT 的目录是qt-everywhere,于是为了使编译器能够找到它需要的那个命令,我将在/usr/local目录下建立一个软连接,直接指向编译器需要的目录。 |
解决步骤G |
首先在/usr/local目录下建立一个文件夹Trolltech,然后进入这个文件夹,再执行下面的这个命令, ln -s /usr/local/qt-everywhere Qt-4.7.0 这样由Qt-4.7.0就可以找到bin目录下的uic可执行文件了。 |
G后状况H描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
qmake后出现错误 qt_config.prf:10: include(file) requires one argument. |
H原因分析 |
环境变量设置的问题, |
H解决步骤 //简单的可以多步骤一起列在下面 |
将环境变量QMAKESPEC修改下或删掉 |
H后状况I描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
用qmake正常,之后再make的话,会有这样的错误信息 from dialog.cpp:1: /witech/qt-extended-4.4.3/qtopiacore/qconfig-qpe.h:1:91: error: http://www.cnblogs.com/http://www.cnblogs.com/../qt- extended-4.4.3/qtopiacore/qt/src/corelib/global/qconfig-qpe.h: No such file or directory make: *** [dialog.o] 错误 1
用Qt Creator(在tools->options中添加arm用qmake)的话,在最后也同样能得到这样的错误信息: /witech/qt-extended-4.4.3/qtopiacore/qconfig-qpe.h:1: error: http://www.cnblogs.com/http://www.cnblogs.com/../qt- extended-4.4.3/qtopiacore/qt/src/corelib/global/qconfig-qpe.h: No such file or directory 不过这次从第一行能看到错误,似乎在 In file included from /witech/builddir/sdk/qtopiacore/qconfig-qpe.h:1,双击该错误直接跳到/witech/builddir/sdk/qtopiacore/qconfig-qpe.h:1: #include "/witech/qt-extended-4.4.3/qtopiacore/qconfig-qpe.h" 这个路径是错误的,里边没有这个文件。
于是在硬盘里找了很久之后,才发现真的没有、、、
|
I原因分析//包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
后来才突然想起来,会不会是之前的一个操作,把文件误删了呢? 因为qt-extended-4.4.3和builddir(其实是4.4.3的源代码和编译成的文件)当时都在,前者打开里边的东西后者好像都有,就顺手把前者给删了、、、估计因为这样、、才出事的
|
I解决步骤 //简单的可以多步骤一起列在下面 |
手贱没办法,还是重新编译一个吧、、、三小时啊、、 |
I后状况J描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
因为误删所以重编译qt-extended-4.4.3,结果: ../qt-extended-4.4.3/qbuild/src/main.cpp:49:33: warning: ignoring return value of 'int chdir(const char*)', declared with attribute warn_unused_result [-Wunused-result] make[1]: *** [main.o] Error 1 make exited with value 2 at /witech/qt-extended-4.4.3/src/build/bin/configure line 2355 make: *** [src/build/mkconf/configure] Error 1 ./build: 行 53: bin/qbuild: 没有那个文件或目录 ./build: 行 54: bin/qbuild: 没有那个文件或目录
|
J原因分析//包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
应该按以下顺序弄:g++ 、编译4.4.3、QtCreator 但是后来4.7.1就不必在Creator之前弄
|
J解决步骤 //简单的可以多步骤一起列在下面 |
1、“我用的是ubuntu11.04的,我安装了g++编译器后,再把qt creator卸掉,就可以了,另外,可以用g++ -v查看g++编译器是否已安装”
2、 之后还是不行、、、哎、、、只好直接重装Ubuntu系统了、、、(其实我后来怀疑应该先卸掉g++,再重新编译,不过已经没勇气再看到出现这个错误了)
这周全部工作推翻重来,误删害人啊、、、
ubuntu 如何卸载qt creator 解决: 假如你是通过软件中心或者apt安装的。可以在软件中心-》所有软件(点已安装会很慢的)里面找到,然后点击卸载。 或者在命令行:sudo apt-get remover qtcreator
假如你是从诺基亚或者论坛下载的qt的二进制安装包安装的。 进入qt的安装目录默认是/opt/Qt... 然后用管理员权限运行SDKManger,选择removed all compoent单选框,确定。即可。
|
J后状况K描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
这个是百科全书里边有提及的,不过还是mark一下:
qmake之后立即make;或者使用QtCreator进行构建,会发生错误 错误示例1、 moc_dialog.o:(.rodata+0x11c): undefined reference to `typeinfo for QDialog' collect2: ld returned 1 exit status make: *** [Helloword] Error 1 错误示例2、 (.rodata+0x114):-1: error: undefined reference to `typeinfo for QMainWindow' (.rodata+0x114):-1: error: undefined reference to `typeinfo for QMainWindow'
|
K原因分析//包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
没有修改Makefile |
K解决步骤 //简单的可以多步骤一起列在下面 |
要修改下Makefile,在CFLAGS和CXXFLAGS中添加" -fno-rtti "编译参数,保存退出,之后编译就可以通过了。
但4.7.1按一定的编译参数编译后,可以不必修改Makefile.详见《【配置】QT&QWT&sqlite3安装配置》 |
K后状况L描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
这个按照书上说的设置还是不行 ./Helloword: error while loading shared libraries: libQtGui.so.4: cannot open sh ared object file: No such file or directory
|
L原因分析//包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
其实libQtGui.so.4这个文件是有的,只是要设好环境变量。书上没有添加LD_LIBRARY_PATH
|
L解决步骤 //简单的可以多步骤一起列在下面 |
重新设置开发板的环境变量为(/etc/profile): #Qt export PATH='/opt/Qtopia4.4.3/lib:/opt/Qtopia4.4.3/bin:/sbin:/usr/sbin:/bin:/usr/bin' export QPEDIR='/opt/Qtopia4.4.3' export QTDIR='/opt/Qtopia4.4.3' export QT_QWS_FONTDIR='/opt/Qtopia4.4.3/lib/fonts' export QWS_DISPLAY='LinuxFb:mmWidth152:mmHeight88:1' export QWS_MOUSE_PROTO='tslib:/dev/input/event1' export TSLIB_CALIBFILE='/etc/pointercal' export TSLIB_CONFFILE='/usr/local/tslib/etc/ts.conf' export TSLIB_CONSOLEDEVICE='none' export TSLIB_FBDEVICE='/dev/fb0' export TSLIB_PLUGINDIR='/usr/local/tslib/lib/ts' export TSLIB_ROOT='/usr/local/tslib' export TSLIB_TSDEVICE='/dev/input/event1' export TSLIB_TSEVENTTYPE='H3600' export QT_PLUGIN_PATH='/opt/Qtopia4.4.3/plugins:/opt/Qtopia4.4.3/qt_plugins/' export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:$QTDIR/qt_plugins/:/usr/local/lib:$LD_LIBRARY_PATH
|
后状况描述 //可以是文字描述、截图等。若步骤过于简单,此栏可略。若出现新问题,则必须填写。下同 |
原因分析//包括资料查找、背景材料等。也可以附上网址。必要的文档可以作附件列后。下同。 |
解决步骤 //简单的可以多步骤一起列在下面 |
以上调试结束 |
附件目录
附件一 |
也谈Qt经典出错信息之QApplication: No such file or directory |
附件二 |
附件1
题目:也谈Qt经典出错信息之QApplication: No such file or directory |
来源:http://blog.csdn.net/qter_wd007/article/details/5377131 |
正文内容: |
这个问题似乎是老生常谈了,好多朋友也都就这个问题做了探究,这里我说说我的看法,以及对于初学者而言,如何快速定位问题,快速解决问题,
下面是网友zhu的完整阐述:
这个出错信息一般是新手在编译Qt4第一个应用”Hello,World”的时候,翻开Qt编程的第一个例子。都说很简单。 #include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc,argv); QWidget *ww=new QWidget(); ww->resize(300,200); ww->show(); return app.exec(); } 一编译结果出现了上面这个错误,那叫一个郁闷。
其实花点心思照着提示,新手也是可以自己解决问题的。根据提示QApplication提示,应该是头文件没找到。那我们可以查看当前目录下Makefile里的环境变量INCPATH知道make应用是去哪里找头文件的。例如 ./Makefile 文件部分内容 15 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) 16 INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. 17 LINK = g++ 第16行里面的,对应的去查找/usr/include/qt4/QtGui/QApplication这个文件是否存在(一般是不存在,存在就不会出错了)。不存在QApplication文件的原因大致有两个 1)没有装Qt4的开发包 . 解决办法把开发包装上,比如ubuntu下就是在shell里执行sudo install libqt4-dev;Fedora/SUSe下是在shell里执行sudo yum install qt4-devel 2) Qt4的开发包装了,但是调用了Qt3的qmake 因为有的系统里既装了Qt3,又装了Qt4。如果调用了qt3的qmake,那么上头的INCPATH里的头文件路径也指向了Qt3,那么是找不到 QApplication这个文件的。对应的解决方法就是调用Qt4安装路径下的qmake去生成Makefile,最好用全路径。我的机器Qt4中 qmake安装路径是 zhu@ubuntu:~/test/widget$ dpkg -L qt4-qmake |grep qmake |grep bin /usr/bin/qmake-qt4 /usr/share/qt4/bin/qmake 所以只要执行 /usr/bin/qmake-qt4;make 或者 /usr/share/qt4/bin/qmake:make 都能以Qt4的文件去编译这个最简单的Qt4应用。
原文链接:http://www.cuteqt.com/blog/?p=307
对于新学习Qt朋友而言,其实只要了解了这些内部缘由即可,这种情况一般就是环境变量没有设置正确的原因。
一是根本就没有设置环境变量,比如使用SDK方式安装Qt,但却又不使用Qt Creator作为IDE(Qt Creator在运行时会自动为开发者设置好环境),而是使用其他的IDE或者是vim等来做开发,这样自然就会爆出这个错误。
二是设置了环境变量却又没有设置正确。比如在X11下,设置好环境变量之后,需要重新登录shell,如果不这样做而直接开始开发,一般有可能会报出这个错误。
三是系统中同时存在多个版本的Qt。比如有Qt3和Qt4共存,有多个不同版本Qt4存在,这样就需要考虑一是清理一下环境,使用一个“纯净”的Qt4环境;1是如果在Windows上,可以思考是否有必要同时存在这么多的版本,如果没有实在的必要,统一即可,当然这也是在打造一个“纯净”的Qt4环境;2是如果是在X11上,由于Qt3的存在有可能是系统的需要,系统中有好多的包是依赖Qt3的,那么要不每次在不同的Qt版本间切换时,就变更一下环境变量的设定,要么为各个Qt版本设定为不同的用户使用,每个用户都有唯一的环境了;要么就是使用脚本,做法是为每个qt版本写设置环境变量的脚本, 仅在需要的时候对当前shell设置环境,这种做法对于初学者而言有一定难度,但是效果还是比较好的。
好了,这个问题我想大概总结的比较清楚了,供大家参考,如果还有更多的情况,也请补充,我们共同找到最佳的解决方案。
|
附件2
题目: |
来源: |
正文内容: |