我正在尝试使用Mingw从Linux机器上提供Windows DLL(以及.so)。
我关注this example,其中包含三个文件:DLL源example_dll.cpp
,标头example_dll.h
和客户端应用example_exe.cpp
。这些我位于我的Linux主机和Windows 7 VM共享的文件夹中。这两个盒子都安装了Mingw。
DLL的构建命令是
g++ -c -DBUILDING_EXAMPLE_DLL example_dll.cpp
g++ -shared -o example_dll.dll example_dll.o -Wl,--out-implib,libexample_dll.a
和客户端应用
g++ -c example_exe.cpp
g++ -o example_exe.exe example_exe.o -L. -lexample_dll
所有编译并在安装了Mingw的Windows 7 VM上运行完美。
所有在安装了Mingw的Ubuntu 16.04下完全编译,用g++
替换i686-w64-mingw32-g++
。
但在这种情况下,当从Windows VM运行可执行文件时,“程序无法启动,因为缺少libgcc_s_sjlj-1.dll。
我可以通过在Linux上用i686-w64-mingw32-g++ -o example_exe.exe example_exe.o -L. -lexample_dll -static-libgcc -static-libstdc++
替换4来强制“丢失”的DLL进入可执行文件,这在Windows VM上运行良好。
但我需要提供一个DLL,而不是一个可执行文件。