lua53.pas подключить в лазарус

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Василий
незнакомец
Сообщения: 3
Зарегистрирован: 27.12.2015 20:00:42

lua53.pas подключить в лазарус

Сообщение Василий »

Здравствуйте, я новичок в этом деле. У меня macos и установлен Lazarus. Теперь мне нужно подключить Lua53 к проекту. Я скачал Lua4Lazarus https://github.com/malcome/Lua4Lazarus в папку /Developer/lazarus. В ней есть lua53.pas. Как мне теперь довести до конца это подключение? Подскажите пожалуйста. И как проверить правильность подключения? Спасибо большое
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

https://github.com/malcome/Lua4Lazarus/ ... ag/R150205

Добавлено спустя 23 минуты 53 секунды:
В смысле, загрузите библиотеку lua53.dll и киньте её в windows/system32 (это для Win XP).
В других системах - кидайте в нужные места, чтобы операционка видела lua53.dll.
Грузите пример из папки примеров и ... собственно всё.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

sign
Василий писал(а): У меня macos


И чего он будет делать вендовой .dll в этой экзотике?
Василий
незнакомец
Сообщения: 3
Зарегистрирован: 27.12.2015 20:00:42

Сообщение Василий »

В общих принципах это понятно. Но куда и что кидать ? Если у меня не windows.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Василий писал(а):Как мне теперь довести до конца это подключение?

1)
а проект собирается? потому что не должен, ибо lua53.pas довольное ограничен в смысле поддержки систем:

Код: Выделить всё

{$IFDEF MSWINDOWS}
   LUA_LIB_NAME = 'lua53.dll';
{$ELSE}
   LUA_LIB_NAME = 'liblua53.so';
{$ENDIF}

Т.е. поддерживается только динамическая загрузка, и только для Винды или Linux-а.
На Макоси динамические библиотеки имеют расширение .dylib, либо линукуются уже как framework-и

Т.е. вышеуказанный код нужно переписать на

Код: Выделить всё

{$IFDEF MSWINDOWS}
   LUA_LIB_NAME = 'lua53.dll';
{$ELIF DARWIN}
   LUA_LIB_NAME = 'liblua53.dylib';
{$ELSE}
   LUA_LIB_NAME = 'liblua53.so';
{$ENDIF}

и автору отправить патч.

2) Почему-то на официальном сайте, упоминается, что уже всё готово и допольнительно библиотеки в систему ставить не нужно.
If you use Linux or Mac OS X, Lua is either already installed on your system or there is a Lua package for it.

Сам это утверждение не проверял. Если это так, то ниже перечисленные шаги по установке не нужны.

Но если библиотеки в системе нет, то:
1) её нужно скачать, скажем здесь. Интересует архив lua-5.3.2_MacOS1011_lib.tar.gz
2) из архива интересует только liblua53.dylib
3) зайти в bundle-приложения (project1.app?), в нём есть папка Contents. Зайти в неё. В ней создать папку Frameworks, в эту папку скопировать liblua53.dylib. Примерно так
./project1.app/Contents/Frameworks/liblua53.dylib

"project1.app" это папка bundla. Её имя зависит от имени проэкта. Т.е. если проект называется myproject, то соответственно и папка будет "myproject.app"

После этого должно заработать.

Если приложение без графического интерфейса, а просто утилита командной строки, то .dylib просто положить рядом с исполняемым файлом... хотя имеет смысл установить его в систему.
Василий
незнакомец
Сообщения: 3
Зарегистрирован: 27.12.2015 20:00:42

Сообщение Василий »

Если я создаю новые проекты либо Application либо Console Program, тогда у меня создаются файлы с расширениями .lpr, .lpi и для некоторых еще и unit создаются, а расширения .app нет. Есть просто в корне project.app. Я открыл этот проект и сделал данные шаги:
1.

Код: Выделить всё

curl -R -O http://www.lua.org/ftp/lua-5.3.2.tar.gz
tar zxf lua-5.3.2.tar.gz
cd lua-5.3.2
make macosx test
,
2) из архива интересует только liblua53.dylib
3) зайти в bundle-приложения (project1.app?), в нём есть папка Contents. Зайти в неё. В ней создать папку Frameworks, в эту папку скопировать liblua53.dylib.

но получаю ошибку

Код: Выделить всё

While executing the command: 
"TGDBMIDebuggerInstruction: "-file-exec-and-symbols ", "
gdb reported:
"&"solib-target.c:330: internal-error: void solib_target_free_so(struct so_list *): Assertion `so-

далее я получаю ошибку

Код: Выделить всё

The GDB command:
"-file-exec-and-symbols "
did not return any result.

The GDB process is no longer running.
Хотя раньше компилировалось хорошо, даже форма пустая запускалась.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

.app создасться для проэктов "Application". А точнее когда галочка "Use Application Bundle for running and debugging", или если принудительно нажать "Create Bundle".

Заметка .app. это не сам проект, это лишь "бандл", т.е. директория для хранения приложения и его ресурсов.
В неё ничего кроме .dylib класть не нужно.

Добавлено спустя 21 час 25 минут 20 секунд:
а нифига, не всё так просто как "скачать библиотеку".
Проблема в том, что библиотека на сайте исключительно 64-битная. (при том что OSX вполне нормально поддерживает 32+64 битные библиотеки). А значит в связке с Carbon-ом она не заработает.
Придётся либо собирать под 64 бита (Cocoa), либо собирать 32-битную вручную.

Вручную, означает, что придётся править make файл. Как указано здесь, но опять же не доконца подходит :)

Добавлено спустя 11 часов 33 минуты 43 секунды:
Описал, как быстро подключить к 64-битному приложению

дописывать про 32-битку пока лень
Alex2013
долгожитель
Сообщения: 3234
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Не пробовал в линуксе и макоси но обычные DLL прекрасно работают если лежат в одной папке с EXE-шником ! :idea:
Зачем их куда-то еще копировать ?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Alex2013 писал(а):Не пробовал в линуксе и макоси но обычные DLL прекрасно работают если лежат в одной папке с EXE-шником ! :idea:
Зачем их куда-то еще копировать ?

Так правила такие для OSX GUI приложений. (Стоит заметить, что на OSX обычные смертные пользователи сами .exe файлы в глаза не видят)

Сам факт того, что .exe подгружает .dll-ку, которая лежит в той же папке с .exe-ником "дарован" самой Виндой. Описан здесь (Desktop Applications)
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Alex2013 писал(а):Зачем их куда-то еще копировать ?


Дело в том, что библиотека может использоваться несколькими программами. А так как (в общем случае) путь к ней неизвестен, то заводят специальную папку(ки) где они складируются. В противном случае, пришлось бы заводить (и запускать!) несколько версий библиотеки из разных мест.
Ответить