Qt下如何编译库

Qt下如何编译库,第1张

一般分为

动态库

静态

,方法分别如下:

一.

静态库的生成

1.

测试目录:

lib

2.

源码文件名:

mywindow.h,

mywindow.cpp

3.

编写项目文件:

mywindow.pro

注意两点:

TEMPLATE

=

lib

CONFIG

+=

staticlib

4.

生成Makefile:

qmake

mywindow.pro

5.

编译生成静态库libmywindow.a

make

二.

静态库的使用

1.

测试目录:

test

2.

将mywindow.h与libmywindow.a拷贝至test目录下

3.

编写main.cpp,

包含头文件mywindow.h,

并调用MyWindow类

4.

编写项目文件:

test.pro

注意加上库路径与库文件名:

LIBS

+=

-L

./

-lmywindow

5.

生成Makefile:

qmake

test.pro

6.

编译:

make

7.

运行:

./test

三.

动态库的生成

动态库编译基本和静态库类似,需要将上述将要进行编译的项目文件.pro中下面这行去掉

CONFIG

+=

staticlib

按上述 *** 作编译完后就可以得到以lib开头并且.so*

结尾动态库文件,一般有多个。

登录/注册

Linux/Ubuntu下 静态编译Qt程序

转载205 阅读

mb5ff5917b5bbc5

2017-07-28 07:07:00

关注

一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的。会提示缺少……库文件之类的错误。这就是动态编译的结果。

但是如果我们想编译一个程序,这个程序在发给别人后,他们可以直接打开,而不需要特别地去先安装Qt库,那就需要采用静态编译了。

在Linux下如何静态编译Qt程序呢?

首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先是需要一个静态编译安装的Qt

1、下载源安装程序,如 qt-x11-opensource-src-4.5.1.tar.gz

2、解压到某一目录

3、cd 进入解压后的目录,命令:

./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.5.1_static 

 ./configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -nomake demos -nomake examples -qt-sql-sqlite -prefix /usr/local/Trolltech/Qt-4.5.1_static

参数-static 指的是要采用静态编译Qt的方法

参数-release指的是只编译release版本的库

参数-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg 是更好确定Qt编译出的程序能在目前不知的系统下运行。

参数-nomake demos -nomake examples 指的是不编译demos和examples

参数-qt-sql-sqlite 如果没有这个参数,configure的时候,可能会提示sqlite 有问题而中止。

参数 -prefix /usr/local/Trolltech/Qt-4.5.1_static 指明静态编译的Qt安装的目录,命名Qt-4.5.1_static是为了区别动态编译安装的Qt,因为如果没有这个参数,安装时会覆盖之前动态编译安装的Qt(如果有的话)。

4、没问题后

make

5、make没问题后再 

sudo make install

6、增加(或改变)环境变量:

在你home目录下你的的名字的目录中,在.profile文件中追加(或改变)如下环境变量:(为Qt设置一些特定的环境变量,这个很重要!.profile文件是隐藏的,可在你的名字目录下,按Ctrl+H显示所有文件查看到)

QTDIR=/usr/local/Trolltech/Qt-4.5.1_static/    

PATH=$QTDIR/bin:$PATH    

MANPATH=$QTDIR/doc/man:$MANPATH    

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH    

export QTDIR PATH MANPATH LD_LIBRARY_PATH   

QTDIR=/usr/local/Trolltech/Qt-4.5.1_static/ 

PATH=$QTDIR/bin:$PATH 

MANPATH=$QTDIR/doc/man:$MANPATH 

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 

export QTDIR PATH MANPATH LD_LIBRARY_PATH   

7、重启

8、在终端测试一下qmake

成功的话,下来用qmake编译出的Qt程序就是采用静态编译的。这时你会发现,静态编译出来的程序大小变大了相当多。

静态编译与动态编译的区别

动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。、

静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。

编辑资源文件

和大部分GUI框架设计工具一样,Qt也引入了资源文件系统。用于方便地将一些二进制文件(主要是图片文件)编译进可执行程序中,免去再发布应用的时候附带其他文件的麻烦。

下面为拷贝别人的解释

Qt的资源文件是以.qrc为后缀名的XML文本格式。在Qt工程中使用资源文件的话,需要在.pro工程文件加入如下代码

RESOURCES = file.qrc

在工程文件中加入这样语句后,qmake系统会自动调用RCC(资源文件编译器)将file.qrc转化成qrc_file.cpp,最后使用gcc进行正常的编译。

资源文件的基本格式

来看一个简单的.qrc例子

<!DOCTYPE RCC><RCC version=”1.0″>

<qresource>

<file>images/copy.png</file>

<file>images/cut.png</file>

<file>images/new.png</file>

<file>images/open.png</file>

<file>images/paste.png</file>

<file>images/save.png</file>

</qresource>

</RCC>

主要部分<qresource>和</qresource>之间的代码,其它部分拷贝过来就可以了,这里的”images/”是相对于你资源文件的路径,和资源文件的格式没有关系。那么你可以在你的源代码中使用QFile访问它们,在本例子中,因为是图片文件,那么你也可以直接用QImage访问它们,不过前面需要加上前缀”:/”,形式为

QImage(“:/images/copy.png”)

资源文件的别名

如果你的资源文件比较多,而且放在一个比较深的目录里,可以通过别名简化

<file alias=”cut-img.png”>images/cut.png</file>

有了别名后,那么在.cpp文件中可以用别名进行访问

QImage(“:/cut-img.png”)

资源文件的国际化

有些资源文件可能根据使用语言的不同,而使用不同的资源文件。也可以通过别名加语言选项来实现,我们看代码

<qresource>

<file>cut.jpg</file>

</qresource>

<qresource lang=”fr”>

<file alias=”cut.jpg”>cut_fr.jpg</file>

</qresource>

在使用上面资源的.cpp代码中,根据系统LANG的不同,可以通过同一语句QImage(“:/cut.jpg”)而能够访问到不同的资源文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11801134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存