使用Mingw在Linux上交叉编译Windows DLL

时间:2018-05-31 09:32:01

标签: c++ linux windows mingw cross-compiling

我正在尝试使用Mingw从Linux机器上提供Windows DLL(以及.so)。

我关注this example,其中包含三个文件:DLL源example_dll.cpp,标头example_dll.h和客户端应用example_exe.cpp。这些我位于我的Linux主机和Windows 7 VM共享的文件夹中。这两个盒子都安装了Mingw。

DLL的构建命令是

  1. g++ -c -DBUILDING_EXAMPLE_DLL example_dll.cpp
  2. g++ -shared -o example_dll.dll example_dll.o -Wl,--out-implib,libexample_dll.a
  3. 和客户端应用

    1. g++ -c example_exe.cpp
    2. g++ -o example_exe.exe example_exe.o -L. -lexample_dll
    3. 所有编译并在安装了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,而不是一个可执行文件。

      • 我注意到DLL libgcc_s_sjlj-1.dll存在于Linux机器上但不存在于Windows机箱中。
      • 我还注意到Linux机箱有Mingw 5.3.1而Windows机箱有Mingw 6.3.0

0 个答案:

没有答案