0
点赞
收藏
分享

微信扫一扫

设计模式-行为型模式-责任链模式

小美人鱼失去的腿 2023-11-18 阅读 49

SDK 10.0.22000.194

有 2种编译方式 ,第二种 看下面

方式一:

1、问题描述:

使用VS编译程序时,运行库选择多线程(/MT),表示采用多线程静态release的方式进行编译。

但是,发现编译是不能通过的。

原因在于安装Qt时默认使用的是动态库,而且官方并没有提供编译好的静态库下载。 但我们可以自己下载Qt源码下来,自己重新编译,生成静态库,这样我们开发的Qt程序也就能完成静态的编译了。以后也就只需要编译成一个exe

2、下载源码包

首先,我们需要从Qt官网(地址:http://download.qt.io/archive/qt/5.11/5.11.2/single/ )下载对应的Qt源码。在这里,我以在Windows下编译Qt程序为例。

3、编译环境

以下是编译时需要的工具,在编译之前,请务必安装! 安装都比较简单。这里直接给出官网下载的链接。最后记得添加到环境变量(安装时把‘’添加到PATH环境“选项勾起就可以了,或者在安装后手动添加也可以)。

  • Ruby version 1.9.3 or later
  • Perl version 5.12 or later
  • Python version 2.7.5 or later
  • JOM

建议安装jom,来替换nmake进行编译,可以充分利用CPU多核的能力,否则估计你会中途吐血的。 jom是nmake的多线程版,nmake不支持多线程,单线程编译速度太慢了。

4、编译源码库

以上东西都准备好以后,接下来我们可以开始编译源码了。

在编译之前记得先将所有的杀毒软件关掉(避免误杀)。

然后进入解压后的Qt源码文件夹下的qtbase/mkspecs下,找到win32-msvc文件夹。

另外顺便说下,如果是想编译较早些时候的Qt源码,源码下载下来后会发现里面没有这个文件夹。而是这样的:

这时候只需要根据你安装的Qt版本进行选择就可以了。

进入选中的文件夹之后,找到qmake.conf文件并使用文本编辑器打开。

我们再根据它include的内容定位到相应的文件。

include(../common/msvc-desktop.conf)

找到相应的文件后,修改其内容。在这里也就是msvc-desktop.conf这个文件。

找到以下标志。将原来的:

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd

修改成:

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd

即将MD改成MT,MDd改成MTd,动态改成静态

在开始菜单中,找到“适用于 VS 2017 的 x64 本机工具命令提示“ 或者 “x64 Native Tools Command Prompt for VS 2017”。

将当前目录切换到源码解压后的目录下。比如我的是在E盘下的qt-everywhere-src-5.11.2这个文件夹。

接下来,将执行关键的几个命令。首先执行configure命令。复制并执行以下命令:

configure.bat -mp -confirm-license -opensource -platform win32-msvc -debug-and-release -static -force-asserts -prefix E:\Qt5.11.2\Qt-msvc2017-x64-static -static-runtime -silent -opengl desktop -qt-sqlite -qt-pcre -qt-zlib -qt-freetype -qt-harfbuzz -qt-libpng -qt-libjpeg -nomake examples -nomake tests

命令解释含义

该命令是在Windows平台上用于编译和配置Qt源代码的批处理文件。让我们逐步解析命令的各个选项和参数:

configure.bat: 这是Qt源代码配置文件的名称。
-mp: 这个选项用于启用多处理器编译,以提高编译速度。
-confirm-license: 这个选项用于确认接受Qt的许可协议。
-opensource: 这个选项用于指定使用开源版本的Qt。
-platform win32-msvc: 这个选项用于指定目标平台为Windows,并使用Microsoft Visual C++编译器。
-debug-and-release: 这个选项用于同时构建调试和发布版本的Qt库。
-static: 这个选项用于生成静态链接库,以便其他应用程序可以将其静态链接到自己的代码中。
-force-asserts: 这个选项用于强制进行断言检查,可以在编译时捕获潜在的错误。
-prefix E:\Qt5.11.2\Qt-msvc2017-x64-static: 这个选项用于指定生成的Qt库文件的安装目录。
-static-runtime: 这个选项用于在静态链接库中包含运行时组件,以便其他应用程序可以独立运行而无需安装Visual C++运行时库。
-silent: 这个选项用于静默安装,即在安装过程中不显示任何图形界面。
-opengl desktop: 这个选项用于启用OpenGL支持,并针对桌面版进行优化。
-qt-sqlite: 这个选项用于启用SQLite数据库支持。
-qt-pcre: 这个选项用于启用Perl兼容的正则表达式库支持。
-qt-zlib: 这个选项用于启用zlib压缩库支持。
-qt-freetype: 这个选项用于启用FreeType字体渲染库支持。
-qt-harfbuzz: 这个选项用于启用HarfBuzz文本渲染库支持。
-qt-libpng: 这个选项用于启用libpng图像库支持。
-qt-libjpeg: 这个选项用于启用libjpeg图像库支持。
-nomake examples: 这个选项用于禁用构建示例应用程序。
-nomake tests: 这个选项用于禁用构建测试应用程序。

总结起来,该命令用于配置和编译Qt源代码,生成静态链接库和其他功能,并将其安装在指定的目录中。

· 其中 -platform win32-msvc 在前面也有提到过的,根据我们安装Qt的版本选择即可; · -static 表示编译静态库; · E:\Qt5.11.2\Qt-msvc2017-x64-static 是编译完后的安装目录,此目录不需要事先创建,建议路径不要太长。 这个过程不需要很久,执行完结果如图:

执行jom命令之前需要到环境变量 path 里面把jom的文件目录配置进去

执行完configure之后,输入编译命令:

  1. jom /J 4

只输入jom也可以,这样会使用所有CPU核心,加上/J参数可以使用指定线程数编译,例如上述命令使用4线程编译。

若没有jom就是用微软自带编译命令nmake,不过nmake不能多线程编译,速度会很慢:

  1. nmake

编译完成之后就可以安装了。

如果你是用的jom进行的编译,使用下列命令安装:

 2.jom install

如果是nmake:

 2.nmake install

如果没有意外,那么我们就会在之前设定好的路径下看到编译好的文件。

至此,整个Qt源码编译过程也就结束了(过程说简单也简单,但我却搞了两三天,就因为前面环境没搭好) 但别高兴得太早,这还没结束呢。。我们必须得建立一个测试程序运行起来才算成功!

4、安装和配置

VS2017中Qt插件安装教程

点击菜单栏上的“Qt VS Tools > Qt Options”打开Qt选项窗口;

然后将我们编译好的Qt版本(E:\Qt5.11.2\Qt-msvc2017-x64-static)添加进来。

我们创建一个Qt应用程序进行测试。

整理遇到的问题。

使用Release方式编译,编译不通过! 错误一:

错误一:

原因及解决方法:

  • 因为我们编译的Qt5.11.2的VC运行库是MT和MTd,工程向导创建的缺省是MD和MDd。也就是我们需要把运行库对应的值改了。

错误二:

原因及解决方法:

  • 在同一个项目中,所有的源文件必须链接相同的VC运行时库。如果某一文件用了MTd版本,而其他文件用MT版本的库,也就是说用了不同的库,就会导致这个警告的出现。 添加一下命令行可解决:

/NODEFAULTLIB:“libcmt.lib”


错误三:

原因及解决方法: 显然,这是因为有些依赖库我们没添加好~

附加库目录改成:Undefined control sequence \lib(QTDIR)\plugins\imageformats;

附加依赖项改成:qtmain.lib;qwindows.lib;Qt5Widgets.lib;Qt5Core.lib;Qt5Gui.lib;Qt5PlatformCompositorSupport.lib;Qt5EventDispatcherSupport.lib;Qt5FontDatabaseSupport.lib;Qt5ThemeSupport.lib;Qt5WindowsUIAutomationSupport.lib;qgif.lib;qicns.lib;qico.lib;qjpeg.lib;qsvg.lib;qtga.lib;qtiff.lib;qwbmp.lib;qwebp.lib;qtfreetype.lib;qtharfbuzz.lib;qtlibpng.lib;qtopenwnn.lib;qtpcre2.lib;qttcime.lib;winspool.lib;shlwapi.lib;rpcrt4.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;glu32.lib;opengl32.lib;gdi32.lib;kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;mpr.lib;%(AdditionalDependencies)

  • 在main.cpp文件中加入代码:
    #pragma comment(lib, "version.lib")
    #pragma comment(lib, "Netapi32.lib")
    #pragma comment(lib, "userenv.lib")
    #pragma comment(lib, "msvcrtd.lib")
    #pragma comment(lib, "Dwmapi.lib")

错误四:

原因及解决方法:

插件无法加载,加载plugin的办法: 使用宏 Q_IMPORT_PLUGIN,在main.cpp中增加代码如下:

	#include <QtCore/QtPlugin>
	Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

继续执行,发现可以了~ 成功了!

方式二:

用VS2017编译Qt 5.15.x静态库

一些莫名其妙的原因要升级到Qt5,耗时几天,总结如下:

第1步:下载源码包:qtbase-everywhere-opensource-src-5.15.x.zip

第2步:安装下面程序:strawberry-perl-5.x.x; python-3.x.x; rubyinstaller-devkit-3.23.x.x

第3步:解压源码包到目录,如:\src-5.15\qtbase\,修改\mkspecs\common\msvc-desktop.conf:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd 

第4步:打开x86 Native Tools Command Prompt for VS2017,进入源码目录执行:

configure -prefix E:\Qt5.11.2\Qt-msvc2017-x64-static -static -release -opensource -confirm-license -nomake tests -nomake examples

第4步:执行nmake,开始编译 。。。

第5步:执行nmake install,开始安装。。。

说明:

1. 建议使用VS2017或之前版本编译,否则配置时Qt 5.15.x可能无法识别

2. Qt5开始,源码树被划分多个子模块,可以单独编译(完整的源码包约有900多Mb)

3. 安装perl,ruby后,确保环境变量被设置,命令行执行: 

perl -version 
ruby --version

4. 编译64位,运行x64 Native Tools Command Prompt,其它步聚相同

5. configure加上: -prefix 指定安装目录,默认是:C:\Qt\Qt-5.15.x,此目录不可更改,除非重新编译。Qt-VSAddin 打开工程时需要查找QT_INSTALL_PREFIX宏。

6. config_help.txt包含完成的配置选项,config.summary文件中包含配置后选项,修改配置后configure加上-recheck-all

7. 重新编译前先执行nmake clean

遇到的问题:

1. 编译dbus出错,configure加上: -no-dbus 不编译Qt D-Bus模块,还是报错:qdbusxml2cpp.cpp(83): error,找到include/qt5/QtCore/qconfig.h增加如下内容:

#if defined(QT_NO_DBUS) && defined(QT_DBUS)
# undef QT_NO_DBUS
#elif !defined(QT_NO_DBUS) && !defined(QT_DBUS)
# define QT_NO_DBUS
#endif

2. 报错:缺少flex,安装WinFlexBison,修改win_flex.exe文件名为flex.exe,设置环境:set path=%PATH%;d:\WinFlexBison

3. 报错:缺少llvm-cofig,安装LLVM(注意需对应Qt编译位数),发现没有llvm-config,下载llvm源码包单独编译tools其中的llvm-config,放到LLVM/bin

编译子模块qttools:

第1步:下载源码包:qttools-everywhere-src-5.15.x.zip

第2步:解压源码包到目录:如:\src-5.15\qttools

第3步:安装LLVM, 添加环境变量LLVM_INSTALL_DIR到安装目录:set LLVM_INSTALL_DIR=d:\LLVM

第4步:设置qmake到环境变量,进入qttools子目录执行:

qmake
nmake
nmake install
举报

相关推荐

0 条评论