网站版权与免责声明
①由于各方面不确定的因素,有可能原文内容调整与变化,本网如不能及时更新或与相关部门不一致,请网友以权威部门公布的正式信息为准。
②本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。
③本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权及个人隐私等问题,请作者在两周内邮件820921846@qq.com联系。
ubuntu自带的软件下载中心下载的Qt让人比较头疼,Qdesigner等可以正常使用,但是Qt的库函数不会下载,apt-get也无法下载的时候,需要手动安装。安装前确保有4G的剩余空间。安装过后可以删除2G安装用的文件。1. 下载Qt Framework。进入网址
http://qt.nokia.com/downloads
,选择中间的标签LGPL,然后下载Qt libraries 4.7.0 for Linux/x11(199MB)更新:找不到的话可以直接到http://qt-project.org/downloads
,在页面中间的Qt Library里选最新的Qt libraries 4.8.3 for linux/X11 (223 MB)2. 解压文件。进到存放下载文件的目录下执行tar -zxvf qt-everywhere-opensource-src-4.7.0.tar.gz其中qt-everywhere-opensource-src-4.7.0.tar.gz是刚下载文件的文件名3. 默认情况下系统是没有g++编译环境的。需要手动安装。执行sudo apt-get install build-essential。如果提示找不到包可以更新一下源。方法为sudo gedit /etc/apt/sources.list编辑源列表。然后执行sudo apt-get update 4. 执行sudo apt-get install libx11-dev libfreetype6-dev libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev 5. 把解压后的文件夹拷贝到英文目录(非tmp)下,进入该文件夹执行./configure,然后选择o(开源),接着选择yes(同意)。运行结束后提示Just run 'make'等信息后表示这步成功了。6. make。执行make,这步需要很长时间(我用了4个小时T_T) 7. 安装qt。执行sudo make install,这步较快,文件安装在/usr/local/Trolltech/Qt-4.7.0 8. 设置环境变量。执行vi ~/.bashrc 添加如下内容:QTDIR=/usr/local/Trolltech/Qt-4.7.0/PATH=$QTDIR/bin:$PATHMANPATH=$QTDIR/doc/man:$MANPATHLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHexport QTDIR PATH MANPATH LD_LIBRARY_PATH之后重启。如果不会用vi可以执行vi语句后输入:$回车,然后输入o进入输入模式,将上面的字段拷贝后按esc,然后输入大写的ZZ即可。 9. 接下来就可以按照qmake -projectqmakemake1、首先找到这个工具,这个工具叫做“windeployqt”。它一般位于Qt安装目录下的mingw_XXin目录下,像我的目录就在C:ProgramDataQt.8mingw53_32in。;此时,建议将整个目录直接加入系统环境变量,便于后续使用。;頭條萊垍
2、编译你的程序,注意必须是release版本。debug版本的貌似不行。;萊垍頭條
3、启动cmd,进入到你要发布的程序所在的目录,比如我的程序放在D:Test目录下,就输入”cd /d d: est”,记住里面一定要加”/d”的参数,否则将无法进入该目录。;萊垍頭條
4、确认你的程序是用Qt Creator哪个模式设计的,总共有2个模式,Qt Widgets Application和Qt Quick Application,不同模式下的参数命令是不一样的:;在Qt Widgets Application模式下;输入”windeployqt hello.exe”命令,其中hello.exe是我的程序名称。條萊垍頭
需要的条件:
1.上位机编译好的可执行文件,以hello为例 在虚拟机的Ubuntu下,写好代码之后,定位到当前目录,执行命令 $qmake-project//生成工程文件.pro $qmake//生成makefile $make//生成可执行文件hello 注意这些命令是在arm版的qt环境下的编译命令!执行qmake-v可查看其是否是arm版本,使用的是否是arm的库!执行filehello可以查看hello是否是arm下运行的程序!
2.移植好QT库的开发板 刚开始学,只需要移植最基本的几个库就行了!触摸屏的、鼠标的、键盘的以后再说!分别是:libQtGui.solibQtCore.solibQtNetwork.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 然后输入 exportQTDIR=/home/fengchao/qtenv/arm exportPATH=$QTDIR/bin:$PATH exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 保存退出!ok! vi使用:打开文件之后,输入i,进入编辑模式,再按ESC退出编辑模式进入命令模式,输入:键入命令wq即保存退出,q退出
4.然后把你编译好的hello这个可执行文件放到你的开发板上,随便哪儿吧 然后执行 ./hello-qws 然后你就可以看见开发板上有显示了!但是可能文字较小,如果有中文可能还是乱码,没事,咱一步步往下来。。。
5.错误分析 1)提示没有链接到字库 QFontDatabase:Cannotfindfontdirectory/home/fengchao/qtenv/arm/lib/fonts-isQtinstalledcorrectly? 这个就是你没装好字库,好好检查一下,修改过来! 2)提示没有QtGui.sonosuchfileofdirectory 也是因为你没有移植好这个库或者跟他链接的文件,再或者环境变量有误!
你可以参考SQLiteStudio这个Qt写的跨平台SQLite管理工具,它自己打包了依赖的Qt库,可以做到解压即用,兼容不同Linux发行版.道理其实跟Windows版Qt程序自带Qt库差不多.
编译前给连接器传一个参数:
说明:
-Wl 表示告诉编译器将后面的参数传递给链接器.
rpath是gcc的一个参数,当程序被加载时,会搜寻rpath目录,寻找共享库.
rpath添加的目录信息保存在可执行文件中.
$ORIGIN表示可执行文件所在的目录.
也就是运行时程序会先去自己所在的目录的lib里去加载依赖库,没有的话再去系统库里找.
如果你的程序在编译时没有传递rpath参数,那你也可以用patchelf来修改你程序的rpath:
注意:patchelf修改文件后再strip会导致文件损坏.
所以应该先用strip删除符号表缩小二进制文件,然后再用patchelf设置rpath.
题外话,Android上既没有glibc库,也没有库链接器ld-linux.so.3.
如果你要把Debian ARM(如树莓派Raspbian)上的软件放到Android上跑,你一样可以打包程序依赖的共享库,让程序也能跑在Android上,比如PHP:
也就是你把库链接器ld-linux-armhf.so.3和PHP依赖的库都放到/data/local/tmp/web/lib里,然后设置个别名,就能在Android的adb shell里运行树莓派的PHP了.
当然,你也可以用patchelf设置PHP的interpreter和rpath,效果差不多:
1 cd ~/Qtenv 2 3 chmod u+x qt-sdk-linux-x86-opensource-2010.04.bin 4 5 ./qt-sdk-linux-x86-opensource-2010.04.bin 为了文件管理方便,将sdk也安装在Qtenv文件夹中。 2、解压源代码包 在用户目录下建立一个Qtenv目录,用于存放编译源文件。 mkdir $HOME/Qtenv 在qtembedded目录下创建arm和x86目录。创建这两个目录主要是为了编译一个用户arm开发版的QTE,另一个目录用于存放用于qvfb的x86下QTE,这样演示和开发都很方便。 1 cd ~/Qtenv 2 mkdir arm x86 接下来将源代码包分别复制到arm和x86下并解压缩。这样做虽然浪费了一些硬盘空间(ps:在宿主机上的硬盘太不值钱了),但能为将来再配置和编译节省很多时间。 1 cd ~/Qtenv 2 mv qt-everywhere-opensource-src-4.6.3.tar.bz2 ./arm 3 cd ~/Qtenv/arm 4 tar xjvf qt-everywhere-opensource-src-4.6.3.tar.bz2 5 6 cd ~/Qtenv/x86 7 mv qt-everywhere-opensource-src-4.6.3.tar.bz2 ./x86 8 tar xjvf ./x86/qt-everywhere-opensource-src-4.6.3.tar.bz2 解压缩后分别针对arm平台和x86平台进行配置,配置前可输入 ./configure -embedded -help 进行配置帮助查询,根据平台配置,并编译和安装文件。其命令代码如下: 1 cd ~/Qtenv/arm 2 ./configure -prefix $HOME/Qtenv/arm -embedded arm -nomake docs -nomake demo -nomake examples 3 make 4 make install 5 6 cd ~/Qtenv/x86 7 ./configure -prefix $HOME/Qtenv/arm -embedded x86 -nomake docs -nomake demo -nomake examples 8 make 9 make install 在经过漫长的配置、编译后就完成了QTE的安装。本人在arm版的编译过程中出现过两个错误,在参考《在arm-linux-gcc 3.4.1下编译 qt-embedded-4.6.2》完成编译。 完成编译和安装后需要对系统的环境变量进行设置,设置可以是临时性设置和永久性设置。临时行设置是直接在命令窗口输入 1 export QTENV=$HOME/Qtenv 2 export QTXDIR=$QTENV/qtsdk 3 export QTEDIR=$QTENV/x86 4 export PATH=$QTXDIR/qt/bin:$PATH 5 export LD_LIBRARY_PATH=$QTXDIR/lib:$LD_LIBRARY_PATH 6 export QVFBDIR=$QTXDIR/qt/bin 7 export QTEMAKEDIR=$QTEDIR/bin 以上这些变量可以根据自己的喜好进行增删。这种设置方法在关闭当前命令终端后失效。 第二种方式是在当前用户的主目录下,编辑.bash_profile文件,加入上述命令行,保存重启命令终端即可。
以下是编译QT源码的基本步骤:
1.源代码的获取 , 最新的是4.8.2版本。
2.解压代码 输入指令: tar zxvf qt-everywhere-opensource-src-4.8.2.tar.gz,解压出QT源代码。
3.执行./config生成makefile 输入指令: ./config 下面会出现提示,是使用the Commercial Edition还是Open Source Edition。 选择”o”,接着会出现一些提示关于license的信息,选择”yes”。
4.编译QT 等在Ubuntu中顺利下载了缺失的那3个lib后。再次重复第三步的 ./configure指令。 输入指令: make, 然后便可以顺利地生成Makefile文件。
5.安装QT 运行指令: sudo make install,需要几分钟的时间,系统会默认将Qt安装到目录:/usr/local/Trolltech/Qt-4.8.2。 验证安装完成:运行/usr/local/Trolltech/Qt-4.8.2/bin/designer,如果能够正常启动designer,则说明Qt已经安装好了。
6.设置环境变量7.测试环境变量
环境变量CPPLIBS在bashrc文件中已经存在,用如下命令:
echo $CPPLIBS
可以得到正确的路径。
在terminal中使用qmake;make;命令后可以正确构建项目。
原因是:qt creator从系统中载入变量,于是找到/usr/bin/qtcreator.sh中加入该环境变量就可以正确编译了
把QTDIR=QT路径、以及QMAKESPEC=win32-msvc2010添加到环境变量,在QT Creator手动添加一个构建配置试试吧
①由于各方面不确定的因素,有可能原文内容调整与变化,本网如不能及时更新或与相关部门不一致,请网友以权威部门公布的正式信息为准。
②本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。
③本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权及个人隐私等问题,请作者在两周内邮件820921846@qq.com联系。