无法在 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 的一部分来仅复制那些依赖项。
我正在尝试使用我的 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 的一部分来仅复制那些依赖项。