gpt4 book ai didi

c++ - 静态构建Qt+Qbs

转载 作者:行者123 更新时间:2023-11-30 02:23:30 24 4
gpt4 key购买 nike

我创建了一个简单的控制台应用程序“Hello world”。首先,我用 qmake 编译它:hello.pro

QT += core
QT -= gui

CONFIG += c++11

TARGET = hello
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

应用程序正常构建,在没有安装 Qt 和 MinGW 的系统上工作正常。可执行文件的大小为 3.58MB。

接下来,我们使用 QBS 构建系统编译相同的源代码。你好.qbs:

import qbs

CppApplication {
Depends{
name: "Qt"
submodules: [
"core",
]
}
name: "HelloWorld-minimal"
files: "main.cpp"
}

可执行文件大小为 4.35MB。该应用程序需要“libwinthread-1.dll”、“libstdc++ - 6.dll”和“libgcc_s_dw2-1.dll”。

一个问题:如何在QBS中通过静态链接上述库正确地构建一个静态应用程序,并使可执行文件的大小相同?

(对于项目的标准构建,没有静态,Qmake 和 Qbs 的可执行文件的大小是相同的)。

最佳答案

找到答案:

import qbs

CppApplication {
Depends{
name: "Qt"
submodules: [
"core",
]
}
Properties {
condition: Qt.core.staticBuild
cpp.linkerFlags: [
"-static",
"-static-libgcc"
]
}
name: "HelloWorld-minimal"
files: "main.cpp"
}

文件大小仍然比使用 qmake 编译时大(我假设这是由于 qbs 的微调)。但是,主要问题已解决:应用程序不需要额外的 dll。

UPD:此解决方案适用于 QBS 1.6.0。对于最新版本 (1.9.0),链接器因错误而失败:

unrecognized -a option `tic-libgcc'

WTF?

解决方案:对于 QBS 1.9.0,您必须使用下一个代码:

import qbs

CppApplication {
Depends{
name: "Qt"
submodules: [
"core",
]
}

Properties {
condition: Qt.core.staticBuild
cpp.driverFlags: [
"-static",
"-static-libgcc",
]
}
name: "HelloWorld-minimal"
files: "main.cpp"
}

关于c++ - 静态构建Qt+Qbs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46203031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com