Перейти к содержанию
Посмотреть в приложении

A better way to browse. Learn more.

Форум Академгородка, Новосибирск

A full-screen app on your home screen with push notifications, badges and more.

Чтобы установить это приложение на iOS и iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
Чтобы установить это приложение на Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C API для Lua под Windows

Опубликовано
Никак не могу присобачить C API для Lua к какому-нибудь компилятору. Пробовались свежий MinGW, неофициальный MinGW 4, OpenWatcom 1.5. Есть ли какое-нибудь рабочее решение?

Рекомендуемые сообщения

Опубликовано
Никак не могу присобачить C API для Lua к какому-нибудь компилятору. Пробовались свежий MinGW, неофициальный MinGW 4, OpenWatcom 1.5. Есть ли какое-нибудь рабочее решение?

 

О, Luaшники подтянулись... Проблемы в студию ;) Версию Lua тоже.

Я лично пользуюсь собственной сборкой Lua с помощью MinGW, все окей.

 

 

Опубликовано
  • Автор

Использую Lua 5.1.3 с LuaBinaries.

 

С хедерами проблем, понятное дело, нет. Либы беру из LuaBinaries.

С OpenWatcom наконец все удалось. MinGW 4, взятый с

http://www.develer.com/oss/GccWinBinaries

(под него есть готовая библиотека) в принципе ничего не хочет компилировать. Т.е. это не проблема LuaBinaries. Ну и бог с ним.

 

Под свежий MinGW 5.1.3 нет файлов. Делаю

dlltool -d lua5.1.def -D lua5.1.dll -l liblua5.1.a

как написано в мануале (http://luabinaries.luaforge.net/manual.html).

lua5.1.def беру из сорцов Lua.

Получаю "Syntax error in def file lua5.1.def:0"

Убираю первую строчку "VERSION 5.1.3" из lua5.1.def. Тогда уже не ругается.

Получаю liblua5.1.a, ставлю. Собираю программу, запускаю, и вижу

---------------------------

Microsoft Visual C++ Runtime Library

---------------------------

Runtime Error!

Program: ...\test.exe

R6034

An application has made an attempt to load the C runtime library incorrectly.

Please contact the application's support team for more information.

---------------------------

Подозрительно, что файл liblua5.1.a получается слишком маленьким.

 

Опубликовано
Делаю dlltool -d lua5.1.def -D lua5.1.dll -l liblua5.1.a как написано в мануале (http://luabinaries.luaforge.net/manual.html).

 

Под MinGW все эти пляски с бубнами не нужны, он умеет напрямую линковаться к DLLям.

Ошибка же с инициализацией MSVCRT лечится привязыванием манифеста к файлу.

 

Иными словами...

 

Имеем

 

#include <lua.h>
#include <lauxlib.h>

int main() {
  lua_State *L = luaL_newstate();
  luaL_openlibs(L);
  luaL_dostring(L, "print('Hi!')");
  lua_close(L);
  return 0;
}

 

Делаем

 

gcc -Ilua5.1/include test.c lua5.1.dll
mt -manifest Microsoft.VC80.CRT.manifest -outputresource:a.exe;1

 

Запускам и наслаждаемся

 

G:\temp\4olga>a.exe
Hi!

Опубликовано
  • Автор
mt -manifest Microsoft.VC80.CRT.manifest -outputresource:a.exe;1

Нифигась... Спасибо, заработало!

 

Опубликовано
  • Автор
Еще такой (тупой) вопрос. А отладчик (gdb) после указанной операции можно использовать?
Опубликовано
Еще такой (тупой) вопрос. А отладчик (gdb) после указанной операции можно использовать?

 

Скажу честно --- понятия не имею =)

Опубликовано
Еще такой (тупой) вопрос. А отладчик (gdb) после указанной операции можно использовать?

Можно. Почему нельзя.

Только имей в виду, что gdb понимает только гнутые отладочные символы. Так что, если у тебя dll-ка собрана в VC, то там ничего кроме асма и экспортных/импортных символов не увидишь. :)

Опубликовано
  • Автор

gdb запускаю из Code::Blocks, в котором есть встроенная поддержка. Если без Lua просто Си, то отладчик работает. Если к полученному exe-шнику (без Lua) указанную dll-ку прикрутить, то выдается

An unhandled win32 exception occurred in gdb.exe [3248].

Для файла с Lua та же история.

Опубликовано

Точно, валиться!

Надо им багу запостить. :)

 

Слушай, а что тебе мешает собрать lua мингвой?

Разворачиваешь исходники

запускаешь в корне mingw32-make mingw

Получаешь lua51.dll, lua.exe, luac.exe

 

Запускаться будет где угодно.

Что ещё нужно? :)

 

Кстати, мингву можно и с офф-сайта брать. Там сейчас лежат версии 3.4.5-3 R, 4.2.1 TR, 4.3.0 Alpha.

Опубликовано
  • Автор
Слушай, а что тебе мешает собрать lua мингвой?

Нет опыта. Почему-то казалось, что это трудно.

 

Разворачиваешь исходники

запускаешь в корне mingw32-make mingw

Что за файл mingw?

 

Получаешь lua51.dll, lua.exe, luac.exe

ОК. Удалось собрать, загрузив сорцы в Code::Blocks и нажав Build. Теперь библиотека работает.

Вот только с gdb остались проблемы. Не вылетает, но работать все равно не хочет :( Что-то типа

"The program is not being run" и "Breakpoint 1 ... pending".

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

Аккаунт

Навигация

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.