Nightmare1
@Nightmare1
Программист

Windows совместимая dll собранная с помощью gcc, реально ли?

В общем суть такова, есть некий исходный код библиотеки написанной под линуксом.
После сборки под виндой с помощью mingw получаем якобы готовый модуль для использования в среде lua.
Но, lua этот модуль как dll не понимает.

Команда сборки объектного файла из исходников.
$ gcc -c *.c -I../include -I../klib -I../uthash -I../src -I./luah


Команда сборки исполняемого файла
$ gcc -shared -o ucl.dll lua_ucl.o -L. -llua51 -lucl


В итоге получаем на выходе файл ucl.dll. Вот вроде бы и готово, но в чем проблема?
А вот в чем, при подгрузки этой библиотеки как модуля для lua, а именно при вызове LoadLibrary возникает ошибка будто бы модуль не найден. Но ошибка заключается не в том что require не может найти модуль физически, а в том что ucl.dll как dynamic link library не определяется! Подскажите знающие люди, каким образом можно заставить LoadLibrary понимать ucl.dll как библиотеку?

Сам проект взят отсюдого https://github.com/vstakhov/libucl/

Для сравнения два скриншота заголовочников файла
1. ucl.dll
5z_-BsprTBW9csdnibHPcQ.png
2. utf8.dll (рабочая, полностью определяется и можно пользоваться)
VdP0l8l8SiK7vBWhzm-EqQ.png

Видим что для первого варианта Dll Characteristics не определена или занулена, а так же для второго варианта подсистема определена как Win32 Gui за вместо Win32 Console. Следовательно напрашивается вывод, gcc собирает программу не как dll а как приложение, поэтому LoadLibrary это приложение загрузить не может. Есть ли какое либо решение данной проблемы? Возможно нужно неизвестные для меня флаги указать при сборке приложения через gcc, либо пропатчить выходной файл чтобы он определялся как dll библиотека, но я пока не знаю как это сделать.
  • Вопрос задан
  • 643 просмотра
Пригласить эксперта
Ответы на вопрос 1
@theg4sh
Стоит попробовать добавить флаг `-shared` также в сборку объектов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы