[英]Static build Qt+Qbs
我創建了一個簡單的控制台應用程序“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構建系統編譯相同的源代碼。 Hello.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)鏈接器faild有錯誤:
unrecognized -a option `tic-libgcc'
WTF?
SOLUTION:對於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"
}
consoleApplication: true // CONFIG += console
cpp.cxxLanguageVersion: "c++11" // CONFIG += c++11
(我忽略了捆綁設置,因為你顯然是在Windows上。)
您確定要以相同的模式構建(調試與發布)嗎? 請注意,對於qbs,默認為debug。 如果要更改,請在命令行上將qbs.buildVariant設置為“release”。
比較qmake和qbs生成的鏈接器命令行應該可以讓您深入了解哪些庫被引入以及如何引入。 使用qbs'--command-echo-mode選項查看使用的完整命令行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.