qt静态编译和动态编译,Linux编译qt
记录QT Linux静态编译遇到的坑-吃包子日志-网易博客
http://qbaok.blog.163.com/blog/static/1012926520119219573294/记录了QT Linux静态编译遇到的坑。
分类:
Linux操作系统
标签:
字号、大、中、小订阅
在Qt下静态编译Qt。根据我的经验,Windows下sdk正式安装后直接拿文件来编译是不可行的。需要直接下载Qt的源码包。目前,诺基亚的源代码被称为qt-everywhere-opensource-src的tar包。网上查一下。亲爱的,大部分人编译这个包其实需要12 ~ 13个小时!不过根据我在Windows下静态编译Qt的经验,其实这些东西很多都不用编译。最后,我花了大约40分钟才把所有内容编完。如果你用官方sdk直接安装,那么你已经有动态库了,现在通过源码包编译,那么编译静态库就好了。因为已经有了动态库,所以只需要编译静态发布库就足够了。平时编译的时候谁会用那种浪费时间的静态编译?当产品要部署到其他机器上的时候,需要使用的时候可以连接Qt,这样其他的内容,比如demo,动态库的例子,还是有的。两个版本都不需要太多时间安装,岂不是两全其美?长话短说,现在来说说安装步骤。1.从网上下载qt-everywhere源代码包。如果您只想要这个库,那么您也可以在下面的URL找到您需要的版本。http://www.qtcn.org/bbs/read.php? Tid=10752。解压缩到您的目标目录。3.通过配置选择要编译的零件。您可以通过直接修改配置文件中的Qt _ default _ build _ parts= libs tools examples,docs,demos docs translations 来删除示例、文档和演示(我只删除了这三个。理论上,如果安装了动态版本,工具和翻译(这个是给语言学家用的)也可以去掉。您还可以在最终的configure命令中添加no-make * * *(这里是刚才提到的部分的名称),而无需修改配置文件。有些选项是默认的,您也可以指定选项。这些默认选项在大多数情况下都没问题,但是如果你的程序要部署到一些不确定的linux系统上,比如有些系统甚至没有jpg、png PNG的库(这些是配置默认选项中使用的系统库,如果系统没有这些库就悲剧了),那么你可以添加Qt-gif-Qt-libpngQt-libmngQt-libjpeg。如果你决定最终产品发布只使用静态库,那么你不需要编译调试库,只需要编译发布。4.使用configure生成makefile是因为你不仅要使用自己编译的静态库,还要使用可以用sdk自动安装的动态库以及那些演示和例子。为了使两个Qt库共存,您必须在配置时为静态库创建一个不同于动态库位置的文件夹。比如我的sdk安装在/opt/qtsdk-2010.05/下,所以我在/opt下设置了一个名为qtstatic的文件夹来存储静态库,然后使用configure命令:/configureprefix/opt/Qt staticstaticrelease。当然,我并不是让make看到屏幕上杂乱的输出,而且因为编译突然被一个小错误终止,所以我指定了以下选项:-出错时继续,尽可能继续编译-silent在make时只会显示警告和错误,不会将编译指令输出到屏幕上。当然,如果一开始没有通过修改配置文件删除编译模块,不要忘记添加-nomake选项。比如不想编译例子,可以加上:-nomake例子,等等。因为项目比较大,这一步可能需要几分钟。如果没有指定太多要编译的,应该可以很快完成。Qt 4.7.4样本:/configure-static-release-Qt-zlib-Qt-gif-Qt-libpng-Qt-libmng-Qt-libjpeg-nomake demos-nomake示例-nomake docs-Qt-SQL-SQLite-WebKit-script-silent出现在64位arch中的add-Phonon-JavaScript-JIT-script tools,项目编译并报告错误。我不知道为什么。使用qt 4.8后,静态编译配置会提示警告:使用静态链接会禁用WebKit模块。编译后没有webkit静态包。配置文件中存在以下判断:if[ $ CFG _ SHARED = no ];然后回显“警告:使用静态链接将禁用webkit模块。”canbuildwebkit= no fi你可以通过加入-shared配置项来编译webkit模块,但是编译后还是动态的。看来用webkit的项目暂时还不能在Qt 4.8.0中静态编译。此外,-qt-gif配置项已不存在,因此如果您需要生成tiff格式的图像,需要将其删除或替换为-qt-libtiff。Qt 4.8示例:/configure-static-release-Qt-zlib-Qt-libtiff-Qt-libpng-Qt-libmng-Qt-lib JPEG-no make demos-no make示例-no make docs-Qt-SQL-SQLite-WebKit-SCR Ipt-silent-shared 5。编译安装当然是make,最后make install,但是别忘了make有多线程编译的功能!如果你的机器在此期间不打算做别的事情,可以添加以下选项:-k出现错误时,尽可能继续编译-j N同时编译N项。建议n的值是你的CPU核心数X1.5当然我选的值有点苛刻。我的电脑是奔腾双核T4300,make命令是:make -k -j 4。然后看到系统显示器里的CPU飙升到100%。完成编译并进行安装。当然,作为linux系统,你要注意文件夹的权限……好吧,如果你不知道这个问题,我觉得你需要在linux上多下功夫。加入-script -webkit后出现问题:
/usr/bin/ld:找不到-LJ score $ CD/c/Qt/4 . 7 . 4/src/3rd party/WebKit/JavaScript core/release $ CP libjscore.a/c/Qt/4 . 7 . 4/lib/$ CP libjscore.prl/c/Qt/4 . 7 . 4/lib/将libjscore . a和libjscore . PRL从源目录复制到lib目录,然后再进行制作。make install之后,特定工程文件的静态编译也会报告这个问题。同样,把这两个文件复制到静态编译Qt的lib目录下也可以解决。6.如何在pro文件中静态编译一个程序,添加CONFIG=static或者CONFIG=staticlib。这取决于你的项目类型。这将使编译器试图寻找静态库进行连接(包括除Qt库以外的库)。当然,这也不排除Qt会静态连接一些会造成兼容性问题的库。本Qt中心有人提出了一个解决方案,有需要可以参考:http://www.qtcentre.org/wiki/index.php? Title=building _ static _ applications 7。动态/静态版本的共存。通常,您不需要将Qt库的位置添加到系统变量中。Qt Creator可以自动扫描系统中存在的Qt库版本。如果无法扫描,可以通过Creator的工具-选项- Qt4添加静态库的路径。虽然QDevelop没有这么智能,但是您可以手动指定INCLUDE和LIB的位置。或许,这根本不是问题。如果你怀念动态库,或者不想在产品发布前体验静态编译蜗牛般的速度,可以在pro文件中指定CONFIG=shared,记得在Project中选择相应的版本。8.静态版本过大的问题。首先,静态编译的Qt程序,调试版大概150M,发布版大概10M,所以你知道我为什么不会编译静态调试库吧?因为没必要。你可以使用诸如strip、UPX(Windows)等工具来压缩你生成的庞大程序。空间和速度从来都是敌人。Windows下静态编译的程序经过UPX压缩后可以缩小到原来的一般体积,但启动速度也下降严重。当然,说到程序的启动速度,关键还是在于自身的设计和实现。最终发布的节目是否要压缩,要看实际情况。祝你和Qt玩得愉快!解决方案:PS中出现“基本XLIB功能测试失败”。配置阶段:编译qt-x11-opensource-src-4.5.3时出现“基本XLIB功能测试失败”。解决方案:完整的错误信息在。/configure阶段,基本XLIB功能测试失败!您可能需要通过编辑/home/Zhu/Qt/T-X11-open source-src-4 . 5 . 2/mkspecs/Linux-g中的QMAKE_INCDIR_X11和QMAKE_LIBDIR_X11来修改包含和库搜索路径,以执行MAKE命令并查看错误消息g -Wl。-O1-O XLIB XLIB。o-L/usr/X11R6/lib-LX ext-lx11-LM/usr/bin/LD:can not find-LX ext如你所见,在/usr/x11r 6/lib下找不到libXext.so,因为你需要安装libX11的开发包。根据自己的系统特点,为Ubuntu安装libx 11-devlibxext-devlibxtst-dev,直接sudo apt-get安装libx 11-devlibxext-devlibxtst-dev为其他:yum安装libx 11-devel libxext-devel libxtst-devel问题解决!===============华丽分割线=============为了在linux 64位系统下编译,我无耻的向PW哥哥要了一个Archlinux 64。PW哥装了,我开始了痛苦的旅程。原来它真的没有毛.……pacman -Syu更系统化Pacman-s curl Pacman-s OpenSSH Pacman-s GCC安装G需要他编译源代码Pacman-s libx 11 libx ext libxtst libx render安装依赖包开始编译。安装目录/q生成您的项目文件。promake如果有错误,记得在下一次make之前执行make clean来清理最后一个编译进程文件。否则,可能会出现错误消息collect2: ld returned 1 exit status。===============华丽的分割线==============q application后运行中的问题:如果q网页依赖于X服务器或者QWEB页面,那么意味着没有整个X窗口就无法运行。在柠檬的大提醒下,我查了一下phantomjs的实现,发现它也是用上面两个,但是可以在角色界面下运行。
考察其项目wikihttp://code.google.com/p/phantomjs/wiki/XvfbSetup,我们发现,如果我们搞Xvfb,我们可以不依赖X(它是内存虚拟X服务器)。yum xorg-X11-server-xvfbxorg-X11-server-xorg xorg-X11-fonts * pacman-Sy xorg-server-xvfb在archlinux中用来解决这三个依赖包*另外据说QT 4.8或者QT5会用Lighthouse来解决X依赖。你可以阅读下面的文章:http://blog..net/dbzhang800/article/details/6526535还不是一个稳定的版本,所以你不打算再次这样做。先试试Xvfb。然后按如下方式构建配置文件(关于/etc/rc.d之间的关系,请参见本文http://left-uestc.appspot.com/2011/01/16/etc/init . d-RC . d-run level . html)之后,在/etc/init.d/Xvfb中创建一个Xvfb init文件,包含以下内容:- #!/bin/sh # # # BEGIN INIT INFO # Provides:Xvfb # Required-Start:$ local _ fs $ remote _ fs # Required-Stop:# X-Start-Before:# Default-Start:2 3 4 5 # Default-Stop:# # # END INIT INFO # N=/etc/RC . d/XvfbN=/etc/INIT . d/Xvfbset-ecase $ 1 in Start)Xvfb:0-screen 0 1024 x768 x24;停止重新加载重新启动强制重新加载);*) echo 用法:$ N { start stop restart force-reload } 2 exit 1;esacexit 0 -启动Xvfb后,在控制台app的命令行中指定要使用的显示:display=:0您的目录/执行文件参数==============华丽分割线================此时可能会出现提示iglxerror:dlopen of/usr/lib/xorg/modules/dri/。xorg/modules/dri/SW rast _ dri . so:undefined和what/usr/share/fonts/type 1/usr/share/fonts/OTF什么字体目录找不到。解决方法是使用pacman -Ss关键字 more命令查询archlinux的远程库。我们来看看可以安装什么字体。例如,安装font-misc-meltho和xorg-fonts-type1来完成字体。swrast_dri.so的操作,pacman -Smesa,安装一个图形库就行了。=============华丽的分割线===============大概十几分钟显示器就会自动黑屏,比较痛苦。而且,按任何一个键,屏幕都需要很长时间才会亮。我不能忍受这种速度的不足。执行以下命令来解决这个问题。Sett-blank0经过测试重启后会失效,所以需要安装这个命令并添加到启动脚本中,每次引导后会自动启动。Archlinux新增:setterm-blank 0 centos 5.4 in/etc/bashrc文件:setterm-blank 0=================华丽分割线==================
QT静态编译后汉字可能会乱码。这是因为处理文字编码的libqcncodecs库以插件形式存储在QT静态编译目录/plugins/plugs/codecs/libqcncodecs . a文件中。字符乱码,需要添加的字体插件在main.cpp文件中:# include QT plugin q _ import _ plugin(qcn codes)然后在engineering pro文件中添加库:qtplugin=q JPEG qcncodes或LIBS=QT静态编译目录/plugins/codecs/libqcncodes.a注意动态编译时要注释掉。
=============华丽的分割线===============显示的中文字体在静态编译Qt后可能效果不好。这是因为一般页面样式表使用的字体无法在静态编译的QT中自动找到替代字体(动态编译的字体没有问题,这很奇怪)。解决方案是替换页面中的字体系列设置。我的替换方法是:当页面触发LoadFinished信号时,调用slot函数,执行evaluateJavaScript方法,用JS创建一个样式标签style *{font-family:你的替换字体!重要的;}/style append child将其添加到head标记中,使用!improtant的高优先级替换了页面字体设置。Ubuntu下Qt-4.7.1的静态编译(已尝试且可行)
Ubuntu-4.7.1下Qt的静态编译(试可行)2011-09-23 12:41最近在研究Qt的静态编译。相对于Qt for windows的静态编译,还是比较容易的。相反,在linux上编译的文章在练习中会出现各种错误。下面简单总结一下我的编译结果。
一.实验环境
1、Ubuntu10.04
2、qt-x11-opensource-4.7.1.tar.gz
二、前期准备
安装ubuntu10.04后,默认没有安装程序编译包,所以我们需要先配置ubuntu。
配置方法:(建议使用全根模式)
1.先调整网络设置,让机器可以上网(具体方法因人而异,此处忽略)
2.要配置的安装包:输入命令:apt-get install build-essential libpcap 0.8-devlibx 11-devlibfreetype 6-devlibavahi-gobject-devlibsm-devlibxrender-devlibfontconfig-devlibxext-dev
第三,静态编译Qt
1.下载qt-x11-opensource-4.7.1.tar.gz
2.给qt-x11-opensource-4.7.1.tar.gz减压。
3.配置路径
输入命令:export path= $ path:/usr/local/trolltech/Qt-4 . 7 . 1/bin
4.进入qt解压目录,配置configure命令:/configure-static-无make演示-无make示例-无make工具-无异常。
5.分别输入“O”和“Y”,然后进入编译阶段。
6、制造
7、制作安装
慢慢等.
第四,静态编译Qt程序。
1.创建一个文件夹,然后编写程序文件XX.cpp
2、质量管理项目
3.生成pro文件后,将CONFIG=static添加到该文件中。
4、质量保证
5.生成Makefile后,在cxxflags中的=后插入-static。
6、制造
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。