Кросс-компиляция Windows DLL на Linux с использованием Mingw - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь доставить Windows DLL (а также .so) из коробки Linux, используя Mingw.

Я следую этому примеру , который состоит из трех файлов,источник DLL example_dll.cpp, заголовок example_dll.h и клиентское приложение example_exe.cpp.Они находятся в папке, общей для моего хоста Linux и виртуальной машины Windows 7.В обоих полях установлен 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

идля клиентского приложения

g++ -c example_exe.cpp g++ -o example_exe.exe example_exe.o -L. -lexample_dll

Все отлично компилируется и работает на виртуальной машине Windows 7 с установленным Mingw.

Все отлично компилируется в Ubuntu 16.04с установленным Mingw, заменив g++ на i686-w64-mingw32-g++.

Но в этом случае, когда исполняемый файл запускается из виртуальной машины Windows, «Программа не может запуститься из-за отсутствия libgcc_s_sjlj-1.dll.

  • Какую ошибку я делаю?

Я могу принудительно "пропустить" DLL в исполняемый файл, заменив 4. на i686-w64-mingw32-g++ -o example_exe.exe example_exe.o -L. -lexample_dll -static-libgcc -static-libstdc++ в Linux, и это работаетидеально подходит для виртуальной машины Windows.

Но мне нужно поставить DLL, а не исполняемый файл.


  • Я заметил, что DLL libgcc_s_sjlj-1.dll существует наБлок Linux, но не блок Windows.
  • Я также заметил, что в блоке Linux установлен Mingw 5.3.1, а в блоке Windows - Mingw 6.3.0
.
...