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交叉编译)

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文件

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运行
时库的环境中运行。

下面是一个简单的步骤来静态编译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静态编译连接和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下静态编译

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静态库的下载和安装配置-修正

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静态编译的全面指导,让您熟练掌握这一技术,并有效地应用于您的项目中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
这两个配置都可以成功编译。

相关文档
最新文档