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