首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态构建Qt+Qbs

静态构建Qt+Qbs
EN

Stack Overflow用户
提问于 2017-09-13 16:53:16
回答 1查看 984关注 0票数 1

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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的可执行文件的大小是相同的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 09:37:22

答复如下:

代码语言:javascript
复制
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)链接器有错误的故障:

代码语言:javascript
复制
unrecognized -a option `tic-libgcc'

WTF?

解决方案:用于QBS 1.9.0您必须使用下面的代码:

代码语言:javascript
复制
import qbs

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

    Properties {
         condition: Qt.core.staticBuild
         cpp.driverFlags: [
             "-static",
             "-static-libgcc",
        ]
    }
    name: "HelloWorld-minimal"
    files: "main.cpp"
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46203031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档