我创建了一个简单的控制台应用程序"Hello“。首先,我用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构建系统编译相同的源代码。Hello.qbs:
import qbs
CppApplication {
Depends{
name: "Qt"
submodules: [
"core",
]
}
name: "HelloWorld-minimal"
files: "main.cpp"
}可执行文件大小为4.35MB。应用程序需要“libwinlin-1.dll”、"libstdc ++ - 6.dll“和"libgcc_s_dw2-1.dll”。
问题:如何使用上述库的静态链接在QBS中构建静态应用程序,从而使可执行文件的大小保持不变?
(对于项目的标准构建,没有静力学,使用Qmake和Qbs的可执行文件的大小是相同的)。
发布于 2017-09-14 09:37:22
答复如下:
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"
}https://stackoverflow.com/questions/46203031
复制相似问题