QT编译与配置(静态库与静态运行时库)
静态库和动态库编译
静态库和动态库编译静态库和动态库是编程中常用的两种库文件形式,本文将介绍它们的编译过程和使用方法。
1. 静态库编译静态库是一种在编译时被链接到程序中的库文件,它包含了程序所依赖的所有函数和数据结构,因此程序在运行时不需要再加载库文件。
静态库的编译过程包括以下步骤:(1)创建一个或多个源文件,使用编译器将它们编译成目标文件(.o 或 .obj)。
(2)将多个目标文件打包成一个静态库文件,通常使用 ar 工具完成此操作。
例如,在 Linux 系统下,可以使用以下命令创建名为 libfoo.a 的静态库文件:$ ar rcs libfoo.a foo1.o foo2.o ...其中,rcs 参数分别表示创建、向库文件中添加目标文件和生成索引表。
(3)在编译器中使用静态库,需要将其链接到目标程序中。
在Linux 系统下,可以使用以下命令编译名为 main.c 的源文件和名为libfoo.a 的静态库文件:$ gcc -o main main.c -L. -lfoo其中,-L 参数指定库文件搜索路径,. 表示当前目录;-l 参数指定链接库文件,实际上是将其前缀 lib 和后缀 .a 去掉,即 foo。
2. 动态库编译动态库是一种在程序运行时动态加载的库文件,它只包含程序所需要的部分函数和数据结构,因此可以减小程序的尺寸和加载时间。
动态库的编译过程包括以下步骤:(1)创建一个或多个源文件,使用编译器将它们编译成目标文件。
(2)将多个目标文件打包成一个共享库文件,通常使用 ld 或链接器完成此操作。
例如,在 Linux 系统下,可以使用以下命令创建名为 libfoo.so 的动态库文件:$ gcc -shared -o libfoo.so foo1.o foo2.o ...其中,-shared 参数表示生成共享库文件。
(3)在编译器中使用动态库,需要将其链接到目标程序中。
在Linux 系统下,可以使用以下命令编译名为 main.c 的源文件和名为libfoo.so 的动态库文件:$ gcc -o main main.c -L. -lfoo其中,-L 和 -l 参数的含义同静态库。
QT5静态编译工程(arm交叉编译)
QT5静态编译⼯程(arm交叉编译)1、⾸先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境2、下载QT源码(5.13版本):http://download.qt.io/development_releases/qt/5.13/5.13.0-rc/single/qt-everywhere-src-5.13.0-rc.tar.xz3、编译QT前需先配置交叉编译器: 解压源码后,进⼊源码的qtbase/mkspecs/linux-arm-gnueabi-g++⽬录,编辑⾥⾯的qmake.conf⽂件: 将⽂件⾥的arm-linux-gnueabi-都改为你⽤的交叉编译器(带路径,如果不带路径则需设置好PATH变量)⽐如改为:arm-linux-gnueabihf-4、⽤静态⽅式编译并安装QT 在源码⽬录下执⾏如下命令: ./configure -v -prefix /home/wch/Qt-5-arm -static -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -no-accessibility -no-dbus -no-openssl -no-opengl -no-glib -no-iconv -no-xcb -no-pch -no-compile-examples -no-pkg-config -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland make make install 其中/home/wch/QT-5-arm是安装⽬录,根据你的情况指定;-static是指定为静态编译;-xplatform linux-arm-gnueabi-g++是说明⽬标平台是arm,其它参数根据⾃⼰的情况⾃⾏修改,各参数的含义可以⽤./configure --help命令查看 经过上⾯三步,就在指定的/home/wch/QT-5-arm⽬录下⽣成的QT的编译环境,该环境的bin⽬录下有qmake程序。
Qt中添加静态库.lb,.a和动态库.dll,.so,头文件和.cpp文件
Qt中添加静态库.lb,.a和动态库.dll,.so,头⽂件和.cpp⽂件添加步骤1.-Qt Creator中,"项⽬"------"添加库"2.把静态库和动态库⽂件放到项⽬⽂件夹中3.在.pro⽂件中会添加如下代码:- 添加动态库:如:lipsap.so (不需要添加路径)LIBS+=-LPWD/......l(指定库的名称)(熟悉Linux语⾔的知道,PWD是当前路径的意思)−添加静态库:(修改⼀下)如:halcon.awin32:LIBS+= PWD/lib....../-lhalcon (不⽤带后缀⽂件名)//项⽬⽂件夹的路径INCLUDEPATH+=$$PWD/include//头⽂件所在的路径DEPENDPATH+=$$PWD/include(添加过后会多两⾏.h⽂件的路径)如果是Linux操作系统,则是:linux:LIBS+= -L$$PWD/.....注意:⼀般.lib⽂件类似于.cpp⽂件,需要⼀个.h⽂件作为接⼝!因此添加.lib⽂件时是要有.h⽂件!⼀般.dll⽂件会有.lib⽂件和.h⽂件2个作为接⼝!因此要添加.h⽂件所在路径和.lib⽂件作为接⼝!4.添加.h和.cpp⽂件(完全开源的)- 先在项⽬⽂件中添加⼀个⽂件夹,include把.h和.cpp⽂件拷贝进去- 添加现有项⽬会发现.pro⽂件中SOURCES和HEADERS中⾃动添加了关于LIBS变量的说明-L 指定库名称-l 指定库名称(⼩写的l)⽆需后缀名,对.so,.a,.dll,.lib都适⽤如果不带-l,则带后缀名即:LIBS += -LD:/codetest/lib/-lws2_32等同于LIBS += D:/codetest/lib/ws2_32.lib也等同于LIBS += -L$$PWD/-lws2_32也等同于LIBS += -L$$PWD/ws2_32.libProcessing math: 100%。
qt静态编译程序
qt静态编译程序
QT静态编译程序是指将QT程序编译成静态链接的可执行文件,该文件包含了所有依赖的库和资源,可以在没有QT运行
时库的环境中运行。
下面是一个简单的步骤来静态编译QT程序:
1. 准备编译环境:首先确保在系统中安装了所需的编译工具链(如GCC、MSVC等)和QT库的源代码。
2. 配置QT源代码:在QT源代码的根目录中,执行configure
命令来进行配置。
例如,对于Linux系统,可以执行如下命令: ./configure -static -prefix /path/to/qt/installation -release
这将配置QT使其支持静态编译,并指定安装目录和编译模式。
3. 编译QT库:执行make命令来编译QT库。
这个过程可能
会比较耗时,取决于系统的性能。
4. 安装QT库:执行make install命令来安装编译好的QT库到指定的安装目录。
5. 编译QT程序:使用静态链接方式编译QT程序。
在项目
的.pro文件中,添加如下配置:
CONFIG += static
这将告诉QT编译器使用静态链接方式。
6. 进行编译:使用qmake生成Makefile,然后执行make命令来进行编译。
7. 最终结果:编译完成后,将生成的可执行文件即为静态编译的QT程序。
可以将该文件复制到其他没有QT运行时库的环境中运行。
需要注意的是,静态编译会增加编译和链接的时间,并且生成的可执行文件可能会比较大。
此外,某些第三方库可能无法静态链接,需要根据情况进行调整和处理。
自-Windows下Qt静态编译连接和DLL依赖问题解决
Windows下Qt静态编译连接和生成程序的mingwm10.dll、libgcc_s_dw2-1.dll依赖问题解决本文编写和程序配置调试:蔚蓝()一、官方Qt 库-MinGW版本(Qt Creator)静态编译和DLL依赖解决1、MinGW版本(1)MinGW官方版本(gcc-4.5.2)使用dwarf2异常处理,默认使用动态C运行时库,默认生成的程序依赖:libgcc_s_dw2-1.dll(105K)libstdc++-6.dll(860K)使用参数-static 可以解除对以上dll依赖。
现在新版MinGW生成的程序默认已经不依赖mingwm10.dll了。
(2)TDM-GCC版本(Codelite和CodeBlocks带的,gcc-4.4.1)使用sjlj异常处理,默认使用静态C运行时库,默认生成的程序独立运行,无dll依赖问题。
(3)MinGWDistro-nuwen.net最新版本(gcc 4.6.0)使用dwarf2异常处理,默认使用静态C运行时库,无DLL依赖问题。
(4)QP-GCC版本(gcc-4.4.5)使用dwarf2异常处理,默认使用静态C运行时库,无DLL依赖问题。
(5)PCX版本,包括32bit和64bit版本的MinGW(最新有gcc 4.6测试版)与(4)差不多,无DLL依赖问题。
(6)Qt库自带的MinGW(gcc-4.4.0)GCC配置信息:D:\Qt\2011qt>gcc -vUsing built-in specs.Target: mingw32Configuredwith: ../gcc-4.4.0/configure--enable-languages=c,ada,c++,fortran,java,objc,obj-c++--disable-sjlj-exceptions --enable-shared --enable-libgcj--enable-libgomp--with-dwarf2 --disable-win32-registry--enable-libstdcxx-debug--enable-version-specific-runtime-libs --prefix=/mingw--with-gmp=/mingw/src/gmp/root--with-mpfr=/mingw/src/mpfr/root--build=mingw32Thread model:win32gcc version 4.4.0 (GCC)Qt带的这个MinGW比较老,gcc-4.4.0版,使用dwarf2异常处理,默认使用动态C运行时库。
Qt5.3.1_MinGw下静态编译
MinGw下静态编译Qt5.3.1作者:ewin.lv一、编译镜头库1) .由于代码中用到了Perl,所以首先要安装Perl的解释器ActivePerl(安装时会自动设置环境变量,无需手动添加), 下载地址/activeperl/downloads(要求- Perl 5.8 or later)。
我装的是ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi安装Python运行环境,默认路径安装Python下载地址(需要2.7以上版本)/download/releases/我装的是python-2.7.8.msi注:Perl和python必须安装,开始我没安装python,出现错误未找到python自动中断编译,安装好python,设置到PATH,重新输入命令mingw32-make解决。
2) . 本人安装的Qt是qt-opensource-windows-x86-mingw482_opengl-5.3.1.exe,安装目录C:\Qt\Qt\Qt5.3.1\;安装时请把源码选上,如图开始-> 所以程序,找到如图命Qt令行输入以下命令看看gcc编译器是否配置正确,gcc -v再输入以下命令看看perl解释器是否配置正确perl -v输入以下命令看看python是否配置正确python按Ctrl + Z回车,可以退出python如果没有配置正确,可以输入命令设置如:set PATH=C:\Python27;%PATH%3).将命令行切换到Qt源代码所在目录,我这里执行的命令为。
cd C:\Qt\Qt\Qt5.3.1\5.3\Src4).执行如下命令开始配置Configure.bat -confirm-license -opensource -platform win32-g++ -mp -debug-and-release -static -prefix "c:\Qt\Qt\5.3.1-static" -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebkit5).执行如下命令开始编译mingw32-make大概要3个钟左右编完,该干啥干啥去先……完蛋了,有错误……这个问题找了一天多,终于,万能的google查到错误原因及补救方法:qml link error(also happens in some desktop build. But no if disable icu and enable freetype):solution: in qtdeclarative/src/3rdparty/masm/yarr/YarrPattern.h, change tostatic CharacterClass* newlineCreate() { return 0;}static CharacterClass* digitsCreate() {return 0;}static CharacterClass* spacesCreate() { return 0;}static CharacterClass* wordcharCreate() { return 0;}static CharacterClass* nondigitsCreate() { return 0;}static CharacterClass* nonspacesCreate() { return 0;}static CharacterClass* nonwordcharCreate() { return 0;}本人补救修改如图然后直接重新输入命令编译(可以尝试configure时disable icu和enable freetype;编译时间太久,我就没有试这个了)mingw32-make终于编译完成了,总占硬盘6.21G6).执行如下命令安装到"C:\Qt\Qt5.3.1"(配置中-prefix设置)mingw32-make install这是个漫长的拷贝过程,足足让我等了17分钟才完成。
Qt静态库的下载和安装配置-修正
Qt静态库的下载和安装配置(QML/QtQuick修正)在Windows下使用Qt开发最后都是要发布程序的,Qt官方的库都是动态链接库,如果发布就需要一大堆的dll,而且还要记得复制plugins/platforms里面的插件,如果用到各种格式图片还要plugins/imageformats里面的插件,所以东西会越弄越多。
针对Windows部署基于Qt的软件,Qt官方有专门文档::doc.qt.io/qt-5/windows-deployment.html对于动态版本程序发布,官方Qt库里面也带了专门部署工具:QTDIR/bin/windeployqt ,这个本人也没用过,感兴趣的可以自己试试。
本文主要讲Qt静态库的下载、安装和配置使用。
使用静态Qt编译的程序只需要一个exe 文件,就可以走遍天下都不怕。
可以自己根据Qt的源代码编译自己的静态版本Qt库,但这个过程非常耗费时间,而且如果有问题还要重新编译,比较麻烦。
幸好网上有现成编译好的静态库,所以给新手和懒人提供了方便。
一、Qt Static Builds 下载在网上寻找Qt静态库,就搜索Qt Static Builds ,目前找到两个地方有::/projects/static-qt/s:github/fostersoftware/QtStaticWindows第一个是SourceForge上的项目,第二个是GitHub上的项目,这两个网站希望新手记牢了,以后要找好东西都可以去这两个网站。
GitHub上面的QtStaticWindows比较新,是5.3.2版本的,所以就选这个来做教程示范。
12从GitHub 网站下载东西,可以直接点击网页右边“Download ZIP ”但是这个下载可能比较卡比较慢,也可能挂掉。
推荐的是安装git 工具,新建QtStatic 目录,在该目录里执行命令:git clone s:github/fostersoftware/QtStaticWindows.git 然后等待下载完成,文件就会出现在QtStaticWindows 子目录里面。
qt静态编译程序
qt静态编译程序Qt静态编译程序是一种将Qt库和依赖项编译到可执行文件中的技术。
这种方法可以使程序更加可移植和独立,减少对外部依赖的需求。
静态编译的主要好处之一是不需要安装Qt库或其他依赖库。
这意味着用户可以轻松地在不同的系统上运行应用程序,而无需担心缺少必要的库文件。
此外,可执行文件的大小相对较小,不仅节省了存储空间,还可以加快启动时间。
静态编译也有一些潜在的挑战和注意事项。
首先,静态编译会增加构建和编译的时间,因为所有依赖库都需要在编译过程中链接到可执行文件中。
其次,如果Qt库或其他依赖库发生更新或修补程序,您可能需要重新编译您的应用程序。
因此,在选择静态编译时,需确保将来不会轻易地更换或更新依赖库。
为了成功地进行静态编译,必须确保正确配置编译环境。
您需要正确安装和配置构建工具链、Qt库和其他所需的依赖项。
在编译过程中,可能会遇到一些错误和警告。
您需要仔细查看这些错误并了解如何解决它们。
一个好的实践是在开始静态编译之前先进行动态编译。
这将确保您的应用程序在动态链接环境中正常工作,并确保没有其他易变的环境因素导致问题。
然后,您可以尝试将动态编译得到的可执行文件进行静态编译,以获得更大的可移植性和独立性。
总而言之,Qt静态编译程序是一项强大的技术,为您的应用程序提供了更好的可移植性和独立性。
通过将所有依赖项包含在可执行文件中,您可以确保应用程序在不同的系统上都能正常运行,而无需安装其他库文件。
尽管具有一些挑战和注意事项,但正确配置编译环境和仔细处理错误可以帮助您成功地进行静态编译。
希望这篇文章能够为您提供有关Qt静态编译的全面指导,让您熟练掌握这一技术,并有效地应用于您的项目中。
Qt学习(六) VS2013编译Qt5.3.1的静态库
Qt学习(六)VS2013编译Qt5.3.1的静态库分类:Qt(windows)2014-07-11 08:36147人阅读评论(5)收藏举报今天用Qt写了个小程序,拷到另一台电脑发现无法运行,缺少文件。
查了一下资料,发现是动态链接库的问题,因为原来一直用的微软系列的开发工具,这个问题不怎么突出,现在用Qt写程序,这个问题就很麻烦了。
针对这个问题网上找到的资料有两种解决方法,一是将程序需要的库文件放在一起,这个显然很麻烦,而且个人很不喜欢这种方式;另一种就是静态编译,所谓静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。
下面介绍一下我自己编译静态库的过程,网上资料不少,但是介绍的都不全面,加上我这方面的基础也不怎么样,着实花了一番功夫。
不多废话,开始介绍:1、下载Qt5.3.1的源码:qt-everywhere-opensource-src-5.3.1.zip打开官网下载页面,点击红线画着的文字“zip”下载源码:保存图片,改后缀为7z,有下载网址2、安装python保存图片,改后缀为7z,有下载网址3、下载完成后解压,注意硬盘的可用空间:我的解压目录是:E:\Qt这是我编译完的文件夹大小(包括编译目录和install目录):4、根据你的VS版本进入相应的文件夹,我是win32-msvc2013:进入E:\Qt\qt-everywhere-opensource-src-5.3.1\qtbase\mkspecs\win32-ms vc2013目录,有两个文件:打开qmake.conf,修改内容并保存,如下:原内容:[plain]view plaincopyprint?1QMAKE_CFLAGS_RELEASE = -O2 -MD2QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi3QMAKE_CFLAGS_DEBUG = -Zi -MDd修改为:[plain]view plaincopyprint?4QMAKE_CFLAGS_RELEASE = -O2 -MT5QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi6QMAKE_CFLAGS_DEBUG = -Zi -MTd即将MD(动态)改为MT(静态)。
Qt4.8.6静态编译
官网下载:/official_releases/qt/4.8/4.8.6/qt-everywhere-opensourcesrc-4.8.6.zip (/official_releases/qt/4.8/4.8.6/qt-everywhereopensource-src-4.8.6.zip)
6-Q M A K E S P E Cs e tt ow i n 3 2 g + + 4 . 6 输入set QMAKESPEC=win32-g++ ,然后cd切换到F:\Qt\Qt_everywhere-src_4.8.6,也就是源码目录,注意这个命令行窗口会一直用到最后,不 要关掉了。
四、配置configure
166
这几天用Qt写了个小工具,结果编译出来的EXE 35K,但是所需的运行库DLL竟然要14M,吓尿了,赶紧找办法解决,原来静态编译(还是静态链 接?)出来的EXE可以变小很多,于是就有了下面的实验过程,大家参考参考就行了,多看几篇同时参考,总会成功的。
一、准备工作
*我的环境是Win7 x64 I3 3220 8G内存。 下载 qt-everywhere-opensource-src-4.8.6.zip,解压,我这里是F:\Qt\Qt_everywhere-src_4.8.6,下称“源码目录”
qtqt486staticdebugandrelease编译debug和release版static编译成静态库platformwin32g使用mingw编译nomakedemosnomakeexamplesnomaketests不编译这些不需要的东西fast快速编译mp使用多核编译优化没什么感觉五编译qt源码命令行在源码目录执行命令mingw32make就开始编译了差不多要等2个小时win7x64i332208g完成编译
qtcreator 静态编译
qtcreator 静态编译
QtCreator静态编译是一种将QtCreator应用程序与其依赖的库打包为一个单独的可执行文件的方法。
静态编译能够保证应用程序的可移植性和兼容性,而且也能够减少对操作系统和系统库的依赖。
本文将介绍Qt Creator静态编译的步骤和注意事项。
步骤:
第一步:下载Qt源代码。
第二步:解压源代码并配置环境变量。
第三步:配置Qt源代码。
第四步:编译Qt源代码。
第五步:安装Qt源代码。
第六步:创建Qt项目并编写代码。
第七步:配置Qt项目。
第八步:编译Qt项目。
第九步:测试Qt项目。
注意事项:
1.静态编译会使得程序文件变得较大,因为所有的依赖库都会被打包到可执行文件中。
2.静态编译需要更多的内存和硬盘空间,因为需要编译更多的代码。
3.静态编译需要更多的时间,因为需要编译更多的代码。
4.静态编译需要在编译和链接时指定所有的依赖库。
总结:
Qt Creator静态编译能够提高应用程序的可移植性和兼容性,同时也能够减少对操作系统和系统库的依赖。
但是静态编译需要更多的内存和硬盘空间,需要更多的时间,同时也会使得程序文件变得较大。
因此,在使用静态编译时需要考虑这些因素。
qt静态编译程序
qt静态编译程序Qt是一个跨平台的C++应用程序开发框架,它可以用于开发各种类型的应用程序,包括桌面应用程序、移动应用程序、嵌入式应用程序等等。
Qt的静态编译功能可以让我们将Qt程序打包成一个独立的可执行程序,不再依赖于外部的动态链接库,从而增强了程序的移植性和稳定性。
静态编译的好处之一是它可以将程序所需的所有依赖文件都打包在一起,这样可以确保程序在任何环境下都能够正常运行,而无需安装额外的库文件。
这对于分发应用程序来说非常方便,用户只需要下载一个可执行文件,就可以直接运行程序,而不需要关心其他的依赖关系。
静态编译还可以提高程序的运行效率,因为静态链接库直接嵌入到可执行文件中,程序启动时不需要再去加载和链接外部的库文件,从而减少了系统的负担和启动时间。
这一点对于一些资源有限的嵌入式系统来说尤为重要,可以提升系统的响应速度和性能。
然而,静态编译也存在一些不足之处。
首先,静态编译会增加可执行文件的大小,因为所有的依赖库都会被打包进去,这对于一些资源受限的应用场景可能会造成问题。
其次,静态编译可能会导致一些冲突问题,如果程序中使用了其他动态链接库,并且这些库与静态链接库存在冲突,就需要进行一些额外的处理。
在使用Qt进行静态编译时,我们需要注意一些细节。
首先,我们要确保Qt的源码和编译器的版本相匹配,这样可以避免一些潜在的问题。
其次,我们需要指定编译器的一些参数,比如要求静态编译。
最后,我们需要指定Qt的配置选项,确保所构建的Qt库是用于静态链接的版本。
这些步骤都需要仔细地进行,以保证静态编译的成功。
综上所述,Qt的静态编译功能可以给我们的应用程序带来很多好处,包括便捷的分发、高效的运行和稳定的表现。
然而,在静态编译时我们也需要注意一些问题,如避免冲突和合理配置编译参数。
通过合理利用Qt的静态编译功能,我们可以开发出更加可靠和高效的应用程序。
qtcreator 静态编译
qtcreator 静态编译关于QtCreator静态编译QtCreator是一种功能强大的跨平台集成开发环境(IDE)和C++应用程序框架,它是Qt项目最重要的一部分。
QtCreator默认是动态链接的,意味着它依赖于系统中安装的Qt动态库,因此在不同的系统上运行时可能会出现一些问题。
为了解决这些问题,建议使用静态编译。
本文将介绍QtCreator静态编译的步骤。
一、下载Qt源码包QtCreator需要Qt框架支持,因此我们需要先从官网下载Qt源码包,下载链接如下:https://download.qt.io/archive/qt/5.15/5.15.0/single/qt-everywhere-src-5.15.0.tar.xz二、解压源码包将下载的源码包解压到任意目录下即可,如下所示:tar -xvf qt-everywhere-src-5.15.0.tar.xz三、静态编译1.打开终端,进入Qt源码目录:cd qt-everywhere-src-5.15.02.使用configure工具配置选项:./configure -prefix /opt/Qt/Qt5.15.0Static -static -opensource -confirm-license -make libs -nomake examples -nomake tests上述命令指定了Qt安装路径为/opt/Qt/Qt5.15.0Static,开启静态编译(-static),同时指定了其他选项。
3.make:make4.make install:sudo make install5.查看结果:进入/opt/Qt/Qt5.15.0Static目录,可以看到QtCreator的静态库已经被编译出来了。
四、使用静态库在QtCreator中使用静态库只需要在.pro文件中添加如下选项即可:CONFIG += staticlib然后重新编译,即可使用静态库。
qt 引用静态库的方法
qt 引用静态库的方法在Qt中,引用静态库的方法如下:1. 首先,创建一个静态库文件,例如`my_static_lib.lib`。
这个文件通常包含了一些编译后的代码,例如头文件、源文件等。
2. 在项目文件(.pro)中,添加对静态库的引用。
在`SOURCES`或`HEADERS`列表中添加库文件,例如:```proSOURCES += \my_static_lib.cpp \main.cppHEADERS += \my_static_lib.h```3. 如果需要引用的静态库是其他项目生成的,请确保该项目的构建系统已经正确配置,以便在编译时生成静态库文件。
4. 在主程序(如`main.cpp`)中,使用#include指令引用头文件。
例如:```cpp#include "my_static_lib.h"```5. 在需要使用静态库中的功能的地方,直接调用对应的函数或类即可。
例如,如果静态库中有一个名为`my_function`的函数,可以直接调用它:```cppvoid my_function() {// 函数实现}```6. 编译和链接项目。
在编译和链接时,确保链接器能够找到静态库文件。
在项目文件(.pro)中,可以添加如下配置:```proLIBS += -L/path/to/my_static_lib -lmy_static_lib```这样,链接器就会在指定的路径中查找名为`my_static_lib`的库文件。
遵循以上步骤,即可在Qt项目中正确引用静态库。
QT开发——动态库静态库的生成与调用(Qmake和Cmake方式)
QT开发——动态库静态库的⽣成与调⽤(Qmake和Cmake⽅式)1.理解动态库与静态库区别链接:https:///wonengguwozai/article/details/93195827静态库和动态库最本质的区别就是:该库是否被编译进⽬标(程序)内部。
1.1 静态(函数)库⼀般扩展名为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib 。
这类库在编译的时候会直接整合到⽬标程序中,所以利⽤静态函数库编译成的⽂件会⽐较⼤,这类函数库最⼤的优点就是编译成功的可执⾏⽂件可以独⽴运⾏,⽽不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。
1.2 动态函数库动态函数库的扩展名⼀般为(.so或.dll),这类函数库通常名为libxxx.so或xxx.dll 。
与静态函数库被整个捕捉到程序中不同,动态函数库在编译的时候,在程序⾥只有⼀个“指向”的位置⽽已,也就是说当可执⾏⽂件需要使⽤到函数库的机制时,程序才会去读取函数库来使⽤;也就是说可执⾏⽂件⽆法单独运⾏。
这样从产品功能升级⾓度⽅便升级,只要替换对应动态库即可,不必重新编译整个可执⾏⽂件。
1.3总结从产品化的⾓度,发布的算法库或功能库尽量使动态库,这样⽅便更新和升级,不必重新编译整个可执⾏⽂件,只需新版本动态库替换掉旧动态库即可。
从函数库集成的⾓度,若要将发布的所有⼦库(不⽌⼀个)集成为⼀个动态库向外提供接⼝,那么就需要将所有⼦库编译为静态库,这样所有⼦库就可以全部编译进⽬标动态库中,由最终的⼀个集成库向外提供功能。
2.qmake⽅式⽣成和调⽤动态/静态库链接:https:///lywzgzl/article/details/428059912.1 ⽣成库QT -= guiTARGET = laser_libTEMPLATE = libCONFIG += staticlib #加这句是⽣成静态库,不加则是动态库DEFINES += LASER_LIB_LIBRARYDEFINES += QT_DEPRECATED_WARNINGSLIBS += /usr/lib/x86_64-linux-gnu/libboost_thread.so\/usr/lib/x86_64-linux-gnu/libboost_system.soSOURCES += \laser_lib.cppHEADERS += \laser_lib.h \laser_lib_global.hinclude(LMS1xx/LMS1xx.pri)DESTDIR = $$PWD/../Libunix {target.path = /usr/libINSTALLS += target}2.2 调⽤库QT -= guiCONFIG += c++11 consoleCONFIG -= app_bundleDEFINES += QT_DEPRECATED_WARNINGS#增加系统库的依赖LIBS +=/usr/lib/x86_64-linux-gnu/libboost_thread.so\/usr/lib/x86_64-linux-gnu/libboost_system.so#增加⾃定义库的依赖LIBS += -L$$PWD/../Lib -llaser_lib #$$PWD获取当前pro⽂件的⽬录INCLUDEPATH += ../laser_libSOURCES += main.cppDESTDIR = $$PWD/../Lib3.cmake⽅式⽣成和调⽤动态库3.1创建共享库项⽬Cmake新建⼀个Qt Creator项⽬,在CMakeLists.txt中添加如下代码#-------------------------------------- 搜索软件包 --------------------------------------find_package(Qt5Widgets REQUIRED)find_package(Qt5Network REQUIRED)set(CMAKE_AUTOMOC ON)#-------------------------------------- 包含头⽂件 --------------------------------------include_directories(${Qt5Widgets_INCLUDE_DIRS})include_directories(${Qt5Network_INCLUDE_DIRS})include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)#-------------------------------------- -添加项⽬- --------------------------------------FILE(GLOB_RECURSE HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h*)FILE(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.c*)add_library(${PROJECT_NAME} SHARED${HEADER_FILES}${SOURCE_FILES}) #STATIC or SHARED 对应静态库或者动态库target_link_libraries(${PROJECT_NAME}${Qt5Widgets_LIBRARIES}${Qt5Network_LIBRARIES})#-------------------------------------- -设置输出- --------------------------------------set(OUTPUT_LIB_DIR ${PROJECT_BINARY_DIR}/libCACHE PATH "Output directory for libraries")file(MAKE_DIRECTORY ${OUTPUT_LIB_DIR})file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${PROJECT_NAME})set(LIBRARY_OUTPUT_PATH ${OUTPUT_LIB_DIR})#-------------------------------------- -安装项⽬- --------------------------------------install(TARGETS ${PROJECT_NAME}EXPORT ${PROJECT_NAME}LIBRARY DESTINATION ${LIBRARY_OUTPUT_PATH})按需编辑plugintest.h和plugintest.cpp,这个就是该共享库项⽬的plugintest类了,我加⼊了⼀个int sum(int input1, int input2);公共函数,内容为:int Plugintest::sum(int input1, int input2){std::cout<<"Hello World!"<<std::endl;int sum = input1+input2;return sum;}保存并编译项⽬吧,没问题的话会在plugintest-build/lib⽬录⾥⽣成libplugintest.so。
qt编译和环境配置总结
Qt编译和环境配置(2011/7/10整理)1、windows下编译 (1)1.1、动态编译 (1)1.2、静态编译 (5)1.3、64位下编译 (5)2、Red Hat Enterprise Linux 5 64-bit安装qt4.6.2 (6)2.1 带开发环境完整安装,不需重新编译 (6)2.2 源码安装 (6)Qt各版本下载地址:/bbs/read.php?tid=1075已经下载到\\100.0.2.161\embtest\tools\QT目录下。
1、windows下编译本文以Qt4.6.2源码为例,介绍在Visual Studio 2005 里集成qt4.6开发环境步骤。
1.1、动态编译(1)安装qt下载Windows 版本的源代码后直接进行安装,安装好后,记得把Qt 的路径添加到系统的环境变量path 里:C:\Qt\4.6.2\bin(2)在Visual Studio 2005 里编译Qt 的源代码在Windows 下,我们自然希望QT 能配合Visual Studio 来使用,这个时候需要用VC++ 重新编译一下Qt 的源代码。
这里以Visual Studio 2005 为例,介绍一下编译Qt4 的基本方法。
(2.1)运行Visual Studio 2005 的vsvars32.bat 脚本来为VC++ 2005 编译器配置系统的环境变量:C:\>"C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"如果执行下面的步骤2.2,应该不需要设置环境变量。
(2.2)编译源代码通过系统的“开始”菜单,按下面的顺序找到一个属于VC++ 的cmd 命令行:Start => All Programs => Visual Studio 2005 => Visual Studio Tools => Visual Studio Command Prompt在cmd 里跳到Qt 所在的源代码目录cd C:\Qt\4.6.2然后用下面的命令来进行编译:C:\Qt\4.6.2>configureC:\Qt\4.6.2>nmake运行configure 命令的时候会提示确认使用协议,照做就好了。
Linux下静态编译Qt程序
Linux下静态编译Qt程序⼀般情况下,我们⽤Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使⽤的。
会提⽰缺少……库⽂件之类的错误。
这就是动态编译的结果。
但是如果我们想编译⼀个程序,这个程序在发给别⼈后,他们可以直接打开,⽽不需要特别地去先安装Qt库,那就需要采⽤静态编译了。
在Linux下如何静态编译Qt程序呢?⾸先需要先安装静态编译的Qt,也就是静态编译Qt程序⾸先是需要⼀个静态编译安装的Qt1、下载源安装程序,如 qt-x11-opensource-src-4.5.1.tar.gz2、解压到某⼀⽬录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参数-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(如果有的话)。
qmake静态编译参数
qmake静态编译参数
1. CONFIG,使用`CONFIG += static`来告诉qmake生成静态链接的可执行文件。
2. QT,使用`QT += core gui`来包含Qt核心和GUI模块,根据你的项目需要添加其他模块。
3. DEFINES,使用`DEFINES += YOUR_DEFINE`来添加你需要的宏定义。
4. LIBS,使用`LIBS += -L/path/to/your/libs -lYourLibrary`来指定链接静态库的路径和库名。
5. INCLUDEPATH,使用`INCLUDEPATH +=
/path/to/your/includes`来指定头文件的搜索路径。
6. QMAKE_LFLAGS,使用`QMAKE_LFLAGS += -static`来告诉编译器生成静态链接的可执行文件。
7. QMAKE_CXXFLAGS,使用`QMAKE_CXXFLAGS += -static`来告
诉编译器生成静态链接的可执行文件。
8. QMAKE_CFLAGS,使用`QMAKE_CFLAGS += -static`来告诉编译器生成静态链接的可执行文件。
以上参数可以根据你的具体项目需求进行调整和扩展,确保你的项目能够成功进行静态编译。
另外,需要注意的是,静态编译可能会增加可执行文件的大小,并且需要确保你有权利进行静态链接的库文件。
希望这些信息能够帮助到你。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QT编译与配置(静态库与静态运行时库)
Qt是一个跨平台的应用程序程序框架,可以运行于Windows、Linux、Mac、S60等平台,自从其开源的授权协议由GPL变为LGPL后就变得流行起来。
LGPL协议允许使用者开发私有程序而不开源,前提是Qt库必须以动态链接的方式加入程序。
打开Qt的下载页面,可以看到SDK和Library的下载链接。
SDK提供了完整的开发环境,而Library仅仅包含代码和编译出的库。
这里的库都是动态链接的Release和Debug版库(相应的Configure参数为-debug-and-release -shared)。
而如果需要静态库,就要自己编译了,如果不想自己编译,qtcn论坛上有不少已编译的静态库可以直接下载,地址
/bbs/read.php?tid=11800。
如果要自行编译,那么备好一份代码就够了,ftp:///qt/source/下有Qt的各个版本的代码下载
下面介绍一下Windows下的静态库编译过程
编译代码有基本的两步,configure和make,不过在这之前还要设置好编译环境。
如果是VS,只要执行“Visual Studio 200X命令提示”就行了,如果是Mingw,需要把mingw下的bin目录加入到环境变量中。
这里推荐的configure命令是
configure [-release|-debug|-debug-and-release] -static -no-qt3support -no-webkit -platform
[win32-g++|win32-msvc2008|...]
要用Debug还是Release就看个人情况了,以上代码的release版编译结果大概有3G。
禁用qt3support是因为这比较容易引起一些Bug,禁用webkit是因为这个东西占了代码总量的大概1/3,而基本上用不到。
platform 参数指定了编译的配置文件,实际上就是qt\mkspecs目录下的各个配置。
然后就是make了。
命令行下进入Qt目录,用VS的执行nmake,用Mingw的执行mingw32-make。
上面的配置大概要编译2个小时。
关于静态运行时库
以上便是静态编译的经典过程,编译完成后可以开始写测试程序了。
不过这里的静态仅仅指的是静态的Qt库,而C++运行时库仍然是动态的。
所以尽管测试程序无需QtGui4.dll之类的库,却还需要Visual C++ 200X Redistributable Package、或者是libgcc_s_dw2-1.dll。
如果想要一个完全静态的编译,实现输出程序为一个单一的exe文件,就需要修改mkspecs,然后再configure。
Mingw: 打开qt\mkspecs\win32-g++\qmake.conf,将QMAKE_LFLAGS那一行改为
QMAKE_LFLAGS = -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import
-Wl,-enable-runtime-pseudo-reloc
VS2008: 打开qt\mkspecs\win32-msvc2008\qmake.conf,设置QMAKE_CFLAGS_RELEASE和
QMAKE_CFLAGS_DEBUG,改为:
QMAKE_CFLAGS_RELEASE = -O2 –MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT –Zi //自己加(非原文)
QMAKE_CFLAGS_DEBUG = -Zi -MTd
如果使用VS编译应用程序,需要对项目属性进行更改,避免Qt和应用程序的运行时库不一致。
一些其它问题
如果用VS开发,需要安装一个Qt VS Integration。
同时为了让VS支持代码补全,需要在“选项-VC++目录-包含文件”中加入Qt\include和Qt\include\QtCore
在使用Mingw进行编译时,默认生成的exe会需要mingwm10.dll,如果没有用到threads,那么在生成的makefile.release/.debug中,删除"-mthreads"参数,然后手动编译即可
Qt的某些版本存在Bug,具体表现为在默认配置下configure,然后make,接着程序报错退出。
比如/browse/QTBUG-11249就描述了一个4.7.0下静态编译的问题,如果不禁用qt3support则报错。
一些其它版本同样可能存在问题。
如果要对付大概只有翻网页或者是记住一些正确的版本和配置了。
PS. Qt 4.6.2下,
configure -release -static -no-qt3support -no-webkit -platform win32-g++
configure -release -static -no-qt3support -no-webkit -platform win32-msvc2008
这两个配置都可以成功编译。