Зачем конвертировать SO в DLL?
Файл .so хранит машинный код в формате ELF с соглашениями о системных вызовах Linux и компоновкой glibc. Файл .dll хранит машинный код в формате Windows PE с компоновкой Windows API. Они скомпилированы для совершенно разных операционных систем - простая смена формата контейнера без перекомпиляции создаст файл, который не сможет загрузить ни одна ОС, так как код внутри по-прежнему будет обращаться к чужой системе.
Способы конвертации SO в DLL
MinGW-w64 OPEN-SOURCE
Выполните кросс-компиляцию исходного кода библиотеки для Windows, используя команду x86_64-w64-mingw32-gcc -shared -o lib.dll *.c, чтобы создать Windows .dll на сборочной машине Linux.
MSVC FREE
Скомпилируйте исходный код библиотеки в Windows, используя Visual Studio или cl.exe с флагом компоновщика /DLL, чтобы создать Windows .dll.
Об этих форматах
Файл .so - это разделяемая библиотека (shared object) в Linux и Unix, эквивалент Windows .dll. Программы загружают её автоматически во время выполнения; вы никогда не открываете её…
Открыть детали .SO →DLL (Dynamic Link Library) - это файл библиотеки Windows, содержащий скомпилированный код, который программы загружают во время работы, поэтому его нельзя открыть двойным щелчком. Если…
Открыть детали .DLL →Качество и на что обратить внимание
- И
.so, и.dllсодержат нативный машинный код, скомпилированный специально для соответствующих ОС - разница заключается на уровне операционной системы, а не только в формате файла. - Если у вас нет исходного кода и библиотека является проприетарной, легального или практического способа получить
.dllне существует. - Многие библиотеки с открытым исходным кодом уже содержат готовые файлы Windows
.dll- проверьте страницу релизов проекта перед попыткой перекомпиляции.
Часто задаваемые вопросы
Почему конвертер не может просто перепаковать бинарный файл?
.so вызывает интерфейсы ядра Linux, которых не существует в Windows - даже будучи упакованным в контейнер PE, Windows не сможет исполнить этот код.Может ли Wine запустить Linux `.so` в Windows?
.dll работали в Linux - то есть в обратном направлении. Это не поможет запустить разделяемые объекты Linux ELF в Windows.