无法在 MinGW 中正确交叉编译 C++ 文件

Can't cross compile C++ files in MinGW properly

我正在尝试使用我的 Linux 机器为 Windows 编译我的 C++ 应用程序。我在执行编译后的 exe 时出现问题。

这是我的问题的简单示例。

helloworld.cpp:

#include <iostream>

int main()
{
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

此代码在 Linux 上使用 g++ 编译和运行完美。但是当我尝试用 mingw 编译它时:i686-w64-mingw32-g++ helloworld.cpp -o helloworld.exe 它编译,但是当我尝试 运行 Windows 告诉我 libgcc_s_dw2-1.ddl is missing.

我使用 -static-libgcc -static-libstdc++ 编译器标志将所有需要的库静态 link 解决了这个问题,但是 Windows 仍然给我一个错误:libwinpthread-1.dll is missing.

我还没有找到任何有用的东西来回答我的问题,所以有谁知道我如何使用 MinGW-w64 将此代码正确编译为 Win32?谢谢!

要构建一个完全静态的文件,您不仅应该使用 -static-libgcc and/or -static-libstdc++,还应该 -static 告诉链接器包含任何其他文件的静态版本图书馆。

或者您可以只构建共享库,但是您需要将 EXE 依赖它的任何 DLL 与 EXE 一起分发,并将 DLL 放在与 EXE 相同的路径中(或中列出的位置中的任何位置) PATH 环境变量)。

我编写了一个名为 copypedeps 的工具作为 https://github.com/brechtsanders/pedeps 的一部分来仅复制那些依赖项。