我有一个程序
#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/
,您的程序就可以正常运行。