Linux mingw32-sfml对windows进行交叉编译-缺少dll文件
Linux mingw32 sfml cross compile for windows - missing dll files
我正在以以下方式编译我的C++项目:
/usr/bin/i686-w64-mingw32-g++ -g -std=c++0x -Wall -I /home/bluszcz/dev/win64/SFML-2.1/include -L /home/bluszcz/dev/win64/SFML-2.1/lib -static-libgcc -static-libstdc++ -static -O4 -c src/game.cpp -o src/game.a -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
然而,当我尝试运行我的exe文件时,我得到了一个关于丢失DLL文件的错误:
bluszcz@zendo ~/dev/win32/builds/magicwizard $ wine mw.exe
err:module:import_dll Library libgcc_s_dw2-1.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\sfml-system-2.dll") not found
err:module:import_dll Library libgcc_s_sjlj-1.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\libstdc++-6.dll") not found
err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\libstdc++-6.dll") not found
err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\sfml-system-2.dll") not found
err:module:import_dll Library sfml-system-2.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\sfml-audio-2.dll") not found
err:module:import_dll Library libgcc_s_dw2-1.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\sfml-audio-2.dll") not found
err:module:import_dll Library libgcc_s_sjlj-1.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\libstdc++-6.dll") not found
err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\libstdc++-6.dll") not found
err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\home\bluszcz\dev\win32\builds\magicwizard\sfml-audio-2.dll") not found
我使用static选项进行编译,那么为什么它会要求libgcc_s_dw2-1.dll呢?
此外,我在那里复制了一些文件,但应用程序仍然看不到它们。
bluszcz@zendo ~/dev/win32/builds/magicwizard $ ls *dll
libsndfile-1.dll sfml-audio-2.dll sfml-graphics-d-2.dll sfml-system-2.dll sfml-window-d-2.dll
libstdc++-6.dll sfml-audio-d-2.dll sfml-network-2.dll sfml-system-d-2.dll
openal32.dll sfml-graphics-2.dll sfml-network-d-2.dll sfml-window-2.dll
bluszcz@zendo ~/dev/win32/builds/magicwizard $
有些文件,比如libgcc_s_dw2-1.dll
,根本不存在于我的文件系统中。。。
总结:
- 为什么我的应用程序看不到丢失的文件
- 如何使用mingw32进行静态编译
- 如何获取丢失的文件
我使用这个版本的sfml库来编译它:http://www.sfml-dev.org/download/sfml/2.1/SFML-2.1-windows-gcc-4.7-mingw-32bits.zip
在用葡萄酒运行程序之前,可以简单地将丢失的dll添加到WINEPATH中,即
export WINEPATH="/usr/x86_64-w64-mingw32/lib;/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix"
注意,您的路径可能略有不同,具体取决于您使用的mingw版本。
只回答三个问题中的最后一个:
关于标准库,我可以从mingw文件夹中复制它们:
cp /usr/lib/gcc/i686-w64-mingw32/5.3-win32/libstdc++-6.dll ./
然而,当我根据我的构建从错误的目录复制时(例如/usr/lib/gcc/x86_64-w64-mingw32/5.3-posix/libstdc++-6.dll(,当具有完全相同名称的文件在这里时,我仍然有同样的错误。
安装mingw64-gcc
和mingw64-gcc-g++
:后在我的Fedora 26上
[leo@pc]$ locate libgcc_s_seh-1.dll
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_seh-1.dll
[leo@pc]$ locate libstdc++-6.dll
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll
[leo@pc]$
如果我复制dll并用生成的a.out.exe运行wine,它就可以工作了。
可能您的应用程序没有看到这些文件,因为它是这样配置的,并且您不需要向命令中添加-static
之类的标记。
对于编译静态库,必须添加-s,如-lsfml-window-s -lsfml-system-s
libgcc_s_dw2-1.dll就在bin文件夹中,在最新的MinGW版本中。
如果缺少dll,则可能存在版本不兼容。
- 不同的Visual Studio版本中缺少.dll
- 程序无法启动,因为缺少 libmpc-3.dll
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 链接库错误 c/缺少 dll/错误版本?
- Dll中缺少什么(致命错误LNK1107:无效或损坏的文件:)
- 在Visual Studio中调试Qt,缺少msvcp140d_app.dll
- MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
- 您的计算机中缺少libgcc_s_sjlj-1.dll
- 在cygwin中使用mingw编译器编译c ++程序时缺少dll。
- 调试 DirectX 11 程序时缺少 DLL (d3dx11d_43.dll)
- 加载库 ..失败.缺少 DLL
- 在另一台计算机上运行应用程序时缺少DLL文件
- Qt + VS2010:程序无法启动,因为<xyz>您的计算机中缺少.dll
- Visual Studio c ++ LoadLibary 错误:程序无法启动,因为您的计算机中缺少 dll
- EventMachine gem解决方法导致缺少dll文件ruby错误,Windows 7
- C++程序无法启动,因为缺少.dll,但它应该查找 .lib
- 依赖项执行器中缺少Dll
- Linux mingw32-sfml对windows进行交叉编译-缺少dll文件
- MingW报告在Netbeans+Qt中缺少.dll文件
- QT在部署后缺少dll