簡體   English   中英

Mingw32 無法靜態鏈接到 libgcc_s_dw2-1、libstdc++-6、libwinpthread-1 (Qt 5.7.1)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM