[英]Mingw32 failing to statically link to libgcc_s_dw2-1, libstdc++-6, libwinpthread-1 (Qt 5.7.1)
在使用 mingw32 編譯時,我正在努力解決與 libgcc_s_dw2-1、libstdc++-6、libwinpthread-1 庫進行靜態鏈接的問題。 如果我構建一個獨立的應用程序,使用-static-libgcc -static-libstdc++ -static -lwinpthread
標志設置一個項目會有所幫助。 但是當我將 Qt 5.7.1 用於 mingw32 編譯器時,它沒有幫助。 應用程序不會開始抱怨缺少這些庫!
這是我的 CMakeLists.txt
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(dummyapp LANGUAGES CXX)
find_package(Qt5 REQUIRED COMPONENTS Core)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++ -static -lwinpthread")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
add_executable(app
app.cpp)
target_link_libraries(app
PRIVATE
Qt5::Core
)
add_custom_command(TARGET app PRE_LINK
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Core> $<TARGET_FILE_DIR:app>
)
應用程序.cpp
#include <iostream>
#include <QVariant>
int main(int argc, const char **argv)
{
std::cout << "Hello dummy!" << std::endl;
QVariant var{};
std::cin.get();
return 0;
}
我懷疑,這種行為的原因是 Qt 本身是動態鏈接到這些庫的。
解決辦法是什么? 有補救措施嗎? 如果沒有,我如何在構建時自動部署這些庫?
如果您的構建及其依賴項不是 static,則這些 DLL 需要與您的應用程序一起分發。 https://lwn.net/Articles/549573/上的文章解釋了 libstdc++-6 DLL 可以在沒有許可問題的情況下分發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.