![](/img/trans.png)
[英]g++ dynamic vs static linking discrepancy in 32bit vs 64bit compilations
[英]How to compile Qt 5 under Windows or Linux, 32 or 64 bit, static or dynamic on Visual Studio or g++
只是一个帖子,以帮助那些尝试这样做的人,因为我没有博客。
这也适用于linux。 随时对其进行编辑和改进。
注意:我还写了另一篇文章,使用 Windows 上的自动脚本从GIT源进行编译 。 您可以为Linux修改它,因为本文中显示了区别。
本文正在不断更新。 如果这对您有帮助,请给它“竖起大拇指”,以便我知道它在帮助人们,而不是没有用处。
如果您有任何意见或发现错别字,请告诉我,以便我解决。
首先,您是否要编译32位或64位版本都没有关系。 唯一的区别是您必须从Visual Studio中选择命令提示符快捷方式,这将初始化不同的环境变量。
让我们从这个开始:
下载并安装Perl: 下载链接
下载并安装Python: 下载链接
下载并安装Windows SDK (可能不是必需的,但建议使用),因为我使用Windows 8,所以这是我使用的版本: 下载链接 ,否则请为您的Windows找到合适的版本。
下载并安装DirectX SDK (如果要使用OpenGL进行编译,则可能是必需的) 下载链接
将jom下载并解压缩到某个文件夹(Linux不需要)( jom是用于与VS并行编译内容的工具,可以使用nmake进行此操作,但我不熟悉) 下载链接
下载的Qt开源 ,并提取它,说C:\\Qt\\Qt5.6
,所以现在该文件夹qtbase
中可以找到C:\\Qt\\Qt5.6\\qtbase
。
仅适用于Windows: 您真的要完全静态吗?
通常,即使您选择静态编译,编译器本身仍不会静态合并其库。 如果要使已编译源相对于编译器(Visual Studio)是完全静态的,则必须在Qt的QMAKE文件中进行此调整。
转到文件(从Qt源目录开始), 对于高于2012的版本,只需在各处使用正确的版本(例如win32-msvc2015) :
一种。 对于VS2012: qtbase \\ mkspecs \\ win32-msvc2012 \\ qmake.conf
b。 对于VS2010: qtbase \\ mkspecs \\ win32-msvc2010 \\ qmake.conf
C。 对于Qt 5.5.0和更高版本 (具有任何VS版本):qtbase \\ mkspecs \\ common \\ msvc-desktop.conf
并编辑以下几行
QMAKE_CFLAGS_RELEASE = -O2 -MD QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi QMAKE_CFLAGS_DEBUG = -Zi -MDd
至
QMAKE_CFLAGS_RELEASE = -O2 -MT QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd
注意:Qt 5.6+具有一个配置参数-static-runtime
,它将为您完成此操作。 对于新版本的Qt,您可能不再需要手动执行此操作。
在Linux或Windows中启动终端,启动Visual Studio的终端(已设置了正确的环境变量,或者使用vcvarsall.bat )。 要启动命令提示符并让它自动为您执行此操作,请转到“开始”,“所有程序”:
对于8之前的Windows版本:找到Microsoft Visual Studio 201x文件夹,然后启动命令提示符(对于32位x86或对于64位x64)。
对于Windows 8:转到“ 开始” ,键入“ cmd”,将显示所有可用于命令提示符的版本。 选择适当的Visual Studio版本(对于32位为x86,对于64位为x64)。
以下是其外观的屏幕截图。 如果存在,请始终选择“本地”。
9。
对于VS2012:对VS2012执行以下命令
set QMAKESPEC=win32-msvc2012 set QTDIR=C:\\Qt\\Qt5.7\\qtbase set PATH=C:\\Qt\\Qt5.7\\qtbase\\bin;%PATH%
注意:对于Qt 5.8+版本,设置QMAKESPEC
环境变量被认为是错误的。 不要为新版本执行此操作。
用于动态链接(需要8 GB)
configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop
动态链接,无示例(需要2 GB)
configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -nomake examples -nomake tests
Now the last command depends on what you want to compile. Just type configure -help and see what the available command-line parameters are.
对于静态链接(需要70 GB,是的,这太疯狂了,不制作示例和演示更为合理)。
configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -static
对于没有示例的静态链接(需要4 GB,更有意义)。
configure -debug-and-release -opensource -platform win32-msvc2012 -opengl desktop -static -nomake examples -nomake tests
现在这将需要一两分钟,然后按如下所示使用jom(假设它已提取到C:\\ Qt \\ jom中):
C:\Qt\jom\jom.exe -j 50
50代表您要使用的核心数。 我使用50,因为我有8个线程,而仅使用8个线程不会完全占据所有内核,因此更多线程会更好,但不要过于贪婪,因为这可能会使您的系统无法响应。
对于VS2010:对VS2010执行以下命令
set QMAKESPEC=win32-msvc2010 set QTDIR=C:\\Qt\\Qt5.7\\qtbase set PATH=C:\\Qt\\Qt5.7\\qtbase\\bin;%PATH%
注意:对于Qt 5.8+版本,设置QMAKESPEC
环境变量被认为是错误的。 不要为新版本执行此操作。 用于动态链接(需要8 GB)
configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop
动态链接,无示例(需要2 GB)
configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -nomake examples -nomake tests
最后一个命令取决于您要编译的内容。 只需键入configure -help并查看可用的命令行参数。 对于静态链接(需要70 GB,是的,这太疯狂了,不制作示例和演示更为合理)。
configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -static
对于没有示例的静态链接(需要4 GB,更有意义)。
configure -debug-and-release -opensource -platform win32-msvc2010 -opengl desktop -static -nomake examples -nomake tests
现在这将需要一两分钟,然后按如下所示使用jom(假设它已提取到C:\\ Qt \\ jom中):
C:\Qt\jom\jom.exe -j 50
50代表您要使用的核心数。 我使用50,因为我有8个线程,而仅使用8个线程不会完全占据所有内核,因此更多线程会更好,但不要过于贪婪,因为这可能会使您的系统无法响应。
Linux与Windows相比有一个小的差异。 建议在linux下编译后再安装 。 老实说,这是它对我没有问题的唯一方法。
在Linux上执行以下命令。 不要忘记用Qt源的正确路径替换路径
export QMAKESPEC=linux-g++
export QTDIR=/home/username/Qt5.7/qtbase
export PATH=/home/username/Qt5.7/qtbase/bin:$PATH
注意:对于Qt 5.8+版本,设置QMAKESPEC
环境变量被认为是错误的。 不要为新版本执行此操作。
假设您要将编译后的源代码安装到目录/home/username/Qt5.7-install
。 在这种情况下,请将以下内容添加到以下任何配置命令中:
-prefix /home/username/Qt5.7-install
警告 :请勿安装到相同的源目录。 这是完全错误的!
如果未设置-prefix
,则将选择默认路径,我猜是/usr/local/
。 我不喜欢使用root来安装任何东西。 我总是喜欢在用户文件夹中安装,这样可逆性和升级就不成问题了。
以下是不同的可能的configure
命令,具体取决于您要执行的操作。
用于动态链接(需要8 GB)
./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop
动态链接,无示例(需要2 GB)
./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -nomake examples -nomake tests
现在,最后一个命令取决于您要编译的内容。 只需输入./configure -help
并查看可用的命令行参数是什么。
对于静态链接(需要70 GB,是的,这很疯狂,不进行示例和测试是更合理的)。
./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -static
对于没有示例的静态链接(需要4 GB,更有意义)。
./configure -debug-and-release -opensource -platform linux-g++ -opengl desktop -static -nomake examples -nomake tests
制作完成后,运行make命令
make -j 50
50代表您要使用的核心数。 我使用50,因为我有8个线程,而仅使用8个线程不会完全占据所有内核,因此更多线程会更好,但不要过于贪婪,因为这可能会使您的系统无法响应。
等待2个小时以上,直到编译完成。
清理! 对于Windows,使用此命令可以节省很多空间: C:\\Qt\\jom\\jom.exe clean
对于Linux,使用以下命令: make clean
您可以将已编译文件夹的大小从8 GB减小到2.5 GB(用于动态链接),从70 GB减小到35 GB(用于静态链接)。
为了在Qt Creator中使用此编译版本,请执行以下操作:
单击“添加”,然后从您在qtbase中的bin所在的文件夹中选择qmake,因此从上面:
C:\\ Qt \\ Qt5.7 \\ qtbase \\ bin \\ qmake.exe
(或对于Linux,请选择安装已编译Qt源的路径,该路径等效于本教程中的/home/username/Qt5.7-install/qtbase/bin/qmake
)
现在打开一个项目,您会发现它要求您选择添加的工具包。
请享用 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.