Ⅰ linux命令行编译qt程序时,默认使用的是arm-linux-gcc编译器,生成的可执行程序无法
修改$QTDIR/mkspecs目录下的符号链接default.将其指向linux-g++
$QTDIR是路径,具体要看你把QT装到什么地方和QT本身的版本,一般是/usr/lib[64]/qt4
修改default符号链接的作用是让qmake在生成Makefile的时候将Makefile文件中的编译器变量$CC与$CXX赋值成gcc和g++
Ⅱ qt平台编写的程序,编译生成的可执行文件,可以随意移植吗
Qt的跨平台,是指“一次编写,到处编译”,也就是说你写的代码一般不需要做特殊处理就可以在不同的平台上用Qt进行编译。
对于你所说的问题,你在win7 64位系统下编译的程序,要看你编译生成的是32位程序还是64位的程序。如果是32位的程序,那么在32位和64位windows系统下运行都是没问题的;如果是64位的程序,就只能在64位windows系统上运行了。
如果你的程序没有什么配置上的特殊要求,当然就不需要相关的配置了,只要把相应的dll文件拷贝到你的程序运行目录下就可以了,你可以到网上搜下Qt程序的发布。
Ⅲ QT程序怎么移植到开发板并运行
需要的条件:
1.上位机编译好的可执行文件,以hello为例
在虚拟机的Ubuntu下,写好代码之后,定位到当前目录,执行命令
$ qmake -project //生成工程文件.pro
$ qmake //生成makefile
$ make //生成可执行文件hello
注意这些命令是在arm版的qt环境下的编译命令!执行qmake -v可查看其是否是arm版本,使用的是否是arm的库!执行file hello 可以查看hello是否是arm下运行的程序!
2.移植好QT库的开发板
刚开始学,只需要移植最基本的几个库就行了!触摸屏的、鼠标的、键盘的以后再说!分别是:libQtGui.so libQtCore.so libQtNetwork.so 以及fonts下的字库
为了防止错误,我一并把他们的相关链接文件so.4、 so.4.7、 so.4.7.2 都移植过去了!
移植方法你可以使用nfs !U盘!我用nfs速度太慢,非常不方便,索性用U盘拷过去了!因为这几个库小的不到1M,大的13M,U盘拷的还是很快的!比较让我费劲的是虚拟机不支持把链接文件拖拽到xp环境下!我只要在虚拟机里用邮件发到我的邮箱里,再在xp环境下把这些东西下下来,再通过U盘拷贝!曲折啊。。。我的虚拟机U盘不识别!
1)从哪儿移植呢?
从你虚拟机里编译安装arm版的QT库里面拷!..arm/lib下
2)移植过去放在哪儿呢?
最好是跟你在虚拟机里面的arm版QT所在目录一样,方便操作!看我的
分别在开发板下新建目录:home/fengchao/qtenv/arm/lib
home/fengchao/qtenv/arm/bin
home/fengchao/qtenv/arm/lib/fonts
把那些.so文件放到lib里面,把字库放到fonts里面!
3.最重要的一步,设置环境变量!
在开发板的根目录下执行:
$ vi /etc/profile
然后输入
export QTDIR=/home/fengchao/qtenv/arm
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
保存退出! ok !
vi使用:打开文件之后,输入i,进入编辑模式,再按ESC退出编辑模式进入命令模式,输入:键入命令wq即保存退出,q退出
4.然后把你编译好的hello这个可执行文件放到你的开发板上,随便哪儿吧
然后执行
./hello -qws
然后你就可以看见开发板上有显示了!但是可能文字较小,如果有中文可能还是乱码,没事,咱一步步往下来。。。
5.错误分析
1)提示没有链接到字库
QFontDatabase: Cannot find font directory /home/fengchao/qtenv/arm/lib/fonts - is Qt installed correctly?
这个就是你没装好字库,好好检查一下,修改过来!
2)提示没有QtGui.so no such file of directory
也是因为你没有移植好这个库或者跟他链接的文件,再或者环境变量有误!
Ⅳ 如何编译arm上运行的qt2可执行文件
编译好的QT的程序,一般会有几个.CPP\.h文件,这么多的文件我们要怎么样编译。首先,我们需要安装QT版本的库,一定要注意,这个库文件一定和开发板上的是同一个库。我们假设这个库名字叫qtembed450-arm。以下步骤一定要注意:
1.安装目录一定要在“/usr/local/”下;
2.安装成功后,这步非常关键,一定要设置环境变量,而且,我们要设置三个环境变量,这样做有三个目的:①可以在任何路径下用库里的命令②编译时候可以指定编译规则为arm-linux-g++③编译时候可以指定到所需要的库文件。那么安装后,输入一下命令:gedit /root/.bashrc.这个命令执行后就进入到设置环境变量的地方,我们要加入以下三个环境变量的设置:
export PATH=$PATH:/usr/local/qtembed450-arm/bin
export LD_LIBRARY_PATH=$LD_LTBRARY_PATH:/usr/local/qtembed450-arm/lib
export QMAKESPEC=/usr/local/qtembed450-arm/mkspecs/default
以上设置非常的重要,非常的关键。呵呵,先照着设置,具体原因我会细谈。注意,我编译用的很重要的qmake-arm 命令,就在/usr/local/qtembed450-arm/bin下,可以打开看看哦!环境变量设置好后,用which qmake-arm 命令来确认下是否成功,呵呵。
3.准备工作做到这里,算是进行一半了,哎,真累啊!还要接着写呢。接下来我们要把我们的编译好的QT程序的文件夹打开,把里面的 .CPP/.h文件拷贝出来,新建立一个文件夹;
4.把以上的文件里的.cpp .h文件复制后新建立一个文件夹。
5.新文件夹建立后,在linux终端中进入到该文件夹所在目录下,执行这个命令:qmake-arm -project命令,千万注意,-project 和arm之间一定要有空格啊!该命令执行后,会生成一个.pro文件,紧接着呢,执行qmake-arm命令,该命令执行后呢,会生成一个Makefile文件,这步很关键哦,没有这步就不会有Makefile文件,一般在这步会出现很多错误,就是库没有发现之类,这个时候,一定要检查前面的步骤,仔细检查看是否是错误。我们这个时候打开Makefile文件看一下,会发现,里面的编译已经变成arm-linux-g++。这个时候,就踏实,接下来怎么办?还用问吗,直接make下就好了,哈哈,简单吧!看到上面的qtmyjpg文件了吗?这个是可以在开发板上运行的哦!接下来不用我说了吧,直接发送到开发板上执行,可以看到图片喽!
6.下到开发板上之后呢,通常会发现没有权限,执行chmod +x qtmyjpg 就可以了,但是注意,要执行这个qtmyjpg文件,一定要这样输入命令:./qtmyjpg -qws为什么需要加这个参数呢?很简单,你不加执行时会出现错误原因,自己看下吧,哈哈!
7.一般这个时候触摸屏需要矫正。进入“/usr/tslib/bin/”,查看里面的文件,有一个“ts-calibrate”文件,执行这个文件,./ts-calibrate 后,可以看到LCD屏幕上出现十字点,用触摸笔点一下就可以,至此,整个QT在LCD上显示整理完毕,花了我半下午时间加上对曹老师的请教,终于完成,嘿嘿!赶紧试试哦!
Ⅳ QTcreator能在windows中交叉编译arm平台程序吗
这个估计没必要,安装一个虚拟机,然后安装一个桌面版的里Linux系统,再在系统中安装一个vim编辑器,再安装一个gdb调试器,最后再arm-linux-gcc就可以编译c文件了,要是你的很多源程序文件都在windows系统中,你可以设置Windows与Linux共享文件。这些东西在网上都可以找到教程,刚开始可能觉得Linux系统很不方便,但是要熟悉Linux系统就必须经常呆在Linux系统中,希望能帮到你。
Ⅵ QT程序的编译是不是直接在linux里的qt creater 上设置一下,编译就可以直接传送到arm板上运行了
1.首先你要构建底包集,arm版上必须有能运行的qt库才行啊,这个如果已经有了就无所谓了,如果没有的话你得自己做。
2.交叉编译设置
除了nokia给的可以直接往nokia手机上拷贝运行之外,其他的你得自己搞。
再牛逼的arm板子,没有操作系统还提什么GUI库啊。
Ⅶ 如何让qt生成arm体系结构的文件
qt项目中想添加编译参数,修改***.pro文件,添加: QMAKE_CFLAGS = `pkg-config --cflags --libs dbus-glib-1`
Ⅷ 在Linux下用QT编写的程序怎么在ARM上运行
用户程序insmod 核心模块加载:具体如下:
核心模块编译完成后,基本上是个未经符号定位的目标文件(object)(当然,如果这个object又是一些子object经过ld -r生成的话,则子object之间的符号定位是已经完成的),object是一种可重定位的代码,它可以加载到不同位置的内存执行。而真正加载进核心,并成为核心的一部分,则是用户程序insmod和核心几个系统调用共同完成的。在此过程中,insmod主要完成或通过系统调用完成以下的工作:
1)由参数找到模块文件,如insmod foo.o,模块文件就是foo.o,根据模块文件计算出模块文件所需的内存大小
2)调用系统调用create_mole,为该模块分配核心空间内存
3)调用系统调用query_mole,得到核心提供的符号表,与系统调用create_mole的返回值(核心模块首地址)加在一起对模块进行重定位。
4)在用户空间为核心模块分配内存,并往该段内存复制一个经过定位的object映象。
5)调用系统调用init_mole,将用户内存中的模块映象到相应的核心空间(首地址为create_mole的返回值)。
6)释放用户内存,中止insmod运行。
如果一切顺利,没有出现未定位的符号,则核心模块object就融入系统,成为系统的一部分了。
核心模块的加载过程对核心来说实际是个“静态链接”的过程,这和用户程序动态链接运行过程再链接需要的代码还是不太一样的,当然,object的可重定位特性保证了链接后的代码正常运行,这点倒是比较相似的。