使用 mingw-w64 编译文件

使用 mingw-w64 编译文件

我有一个程序

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
    cout<<"Hello World!! This Program Is made in win32 API\n";
    return 0;
}

但是当我编译这个程序时

x86_64-w64-mingw32-g++ Hello.cpp -o hello64.exe

然后运行它

wine64 hello64.exe

我收到 2 个错误

0009:err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\\home\\garvit\\C++\\hello64.exe") not found
0009:err:module:LdrInitializeThunk Importing dlls for L"Z:\\home\\garvit\\C++\\hello64.exe" failed, status c0000135

我正在使用 Ubuntu 20.04,并且我是 Linux 新手。

答案1

您需要将此 libstdc++-6.dll 从 mingw 安装(应位于 /usr/lib/gcc/x86-w64-mingw32/9.3-win32/)复制到与您的 exe 文件相同的目录中。我预计您会收到有关 libgcc_s_sjlj-1.dll 的类似消息,您也需要复制它。

我在 32 位和 Windows VM 上对此进行了测试,但我希望不会产生任何影响。

答案2

您收到错误是因为 Wine 不知道这些库在哪里可用。您有两个选择:

  • 将所有需要的库放在同一目录中
  • 静态链接所需库

如果您没有许可问题(例如libstdc++使用 LGPL,要链接到该库,您需要在 LGPL 下许可您的程序才能分发它),您应该静态链接。对于 hello world 程序,编译命令将如下所示:

x86_64-w64-mingw32-g++ hello.cpp -static-libstdc++ -static-libgcc -o hello

另一个选择是将所有库放在同一目录中。因此,只需从/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/或复制这些文件/usr/lib/gcc/x86-w64-mingw32/9.3-win32/,您的程序就可以正常运行。

相关内容