Для package.loadlib lua требует, чтобы dll был в формате COFF или ELF?

Я пытаюсь загрузить dll в мой скрипт lua и вызвать функцию. Когда я создаю dll, используя GCC (под cygwin) и lua (5.2.4), я могу загрузить библиотеку и выполнить ее без проблем. Тем не менее, когда я создаю запустить тот же скрипт из SciTE, используя Lua 5.1, DLL загружается успешно. Тем не менее, он не выполняется. В DLL я пытаюсь просто записать два целых числа в файл.

t = package.loadlib("mylibrary.dll","myfunc")
t(23,45)

Здесь есть два вопроса: 1. В каком формате должен быть файл mylibrary.dll, чтобы lua понимала и выполняла его без проблем - ELF или COFF. 2. Могу ли я запустить dll (очевидно, встроенную в windows) под lua, работающим на Linux?

1 ответ

Вопрос в вашем заголовке, кажется, сильно отличается от причины проблемы, которую вы описываете.

С одной стороны, формат для динамических библиотек, загружаемых Lua, является форматом для платформы, на которой работает код Lua. Так же, как вы не можете взять скомпилированный исполняемый файл Win32 и ожидать его запуска в Linux, вы не можете взять скомпилированный Win32 dll и ожидать, что он загрузит его в Linux. Очевидно, что инструменты эмуляции, такие как Wine, существуют, но они работают за счет эмуляции Windows. Вы можете запустить их в эмуляторе, но не вне его.

Но с другой стороны, это не источник вашей проблемы. Ваша проблема в том, что вы используете динамическую библиотеку, созданную для одной версии Lua, с приложением, созданным для другой версии Lua. Это не работает; Lua не сохраняет совместимость между "второстепенными" версиями, только между ревизиями (Lua 5.1.3 против 5.1.4).

ELF или COFF, это не сработает.

Другие вопросы по тегам