Установка lua это вопрос, который возникает достаточно часто. Что, вообще-то, достаточно удивительно, потому как установка lua на самом деле, крайне проста и понятна. Можно даже сказать, что там вообще нечего делать. Но, раз уж такие вопросы возникают, давайте немного поговорим об установке Lua.
Установка Луа. Скачиваем
Первое, что нам нужно будет сделать перед установкой, это скачать исходники луа с её официального сайта: http://www.lua.org/download.html. Для установки, естественно, нам понадобится самая последняя версия, на данный момент это lua 5.1.4. После скачивания, естественно, надо разархивировать исходники lua в отдельную папку.
Установка Луа. Компиляция.
Есть два варианта компиляции луа, которые, в принципе, ничем не отличаются ))) Первый – это компиляция из Visual Studio Command Prompt:
Запускаем Visual Studio
Выполняем Tools->Visual Studio Command Prompt
Переходим в папку с луа, в директорию etc. Вот так: cd D:/mylibs/lua-5.1.4
запускаем скрипт компиляции луа: etc/luavs.bat
Мы получили нужны нам файлы lua.exe и luac.exe
Второй способ без запуска Visual Studio:
В любом файл-мендеже (я лично работаю в FAR) заходим в папку где_луа/etc/
Редактируем файл, первой строкой ставим: call “путь_к_вижуалстудио/VC/bin/vcvars32.bat”
Добавляем вторую строку: cd .. и сохраняем файл
Запускаем, получаем искомые экзешники
Установка Луа. Доступ
Что бы вы могли запускать луа откуда угодно – вам надо добавить их (путь к ним) в переменную окружения %PATH%. Думаю, Вы сами прекрасно знаете как это сделать. В любом случае, нам не нужны эти файлы, т.к. мы планируем использовать луа внтри наших программ, а не как отдельное приложение. После этого считайте, что сама установка Lua завершена, вам лишь остаётся прописать в Visual Studio пути в получившейся .lib и хидерам луа.
Установка Луа. Статическая линковка.
Меня лично выводит из себя то, что с каждый проектом, использующим луа, приходится таскать и lua.dll , поскольку без неё программы работать не будут. А что бы они работали – надо что бы луа линковалась с нашей программой статически. Делается это тоже совсем не сложно:
Делаем в Visual Studio новый проект, Win32Project, назовём его “LuaLib”
Тип проекта указываем “Static Library”, отключаем использование Precompiled Header, нажимаем Finish
Добавляем в проект все файлы .h и .c, кроме lua.c и luac.c
Что бы компилятор не выдавал нам варнингов, в настройки проекта (Protec/Propreties/Preprocessor) добавляем ;_CRT_SECURE_NO_WARNINGS (не забудьте сделать это и для релиз и для дебаг-версии!!!)
В настройках линковки (Project/Properties/Librarian/General/OutputFile) указываем какие имена библиотек мы хотим. Я указал lua.lib для релиза и lua-debug.lib для дебага.
Компилируем дебаг и релиз-версии. Получаем нужные нам либы
Прописываем пути к ним в Visual Studio
Установка Луа. Проверка.
Проверим, всё ли работает. Создаём новый проект (я сделал консольный проект win32). Дописываем инклюды луа:
extern"C"{# include "lua.h"# include "lauxlib.h"# include "lualib.h"}#include <conio.h> // надо для _getch()
и доделываем сам main():
int _tmain(int argc, _TCHAR* argv[]){
lua_State *L;
L = lua_open();//Создаем стэк
luaL_openlibs(L);//подключить стандартные библиотеки int status = luaL_loadfile(L, "test.lua");//загрузить файл/* Состояние стtка:
[-1]main <--top of the stack
*/if(status){(void)fprintf(stderr, "file not found\n");return1;}int result = lua_pcall(L, 0, LUA_MULTRET, 0);
_getch();return0;}
В настройки линковщика (Project/Properties/Linker/Input/Addition Dependencies) не забываем добавить нашу библиотеку (lua.lib для релиза и lua-debug.lib для дебага). Компилируем. Создаём тестовый файлик с луа-скриптом:
for i =1,10doprint(i)end
Запускаем и видим то, что и хотели. Теперь мы можем использовать Луа в наших программах и не таскать с собой этот ненавистный lua.dll – мне кажется, что это намного удобнее и приятнее )
На этом наш урок завершён. Теперь у вас есть собранные версии дебаг- и релиз- версий луа, собранные для статической компиляции и вы можете без каких-либо проблем использовать их в ваших проектах.
В следующих уроках мы более подробно поговорим про использование луа-скриптов в программах и, в частности, в играх.
C:\lua-5.1.4\etc>del lua.obj luac.obj
Не удается найти C:\lua-5.1.4\etc\lua.obj
C:\lua-5.1.4\etc>link /nologo /DLL /out:lua51.dll l*.obj
LINK : warning LNK4001: не указаны объектные файлы; использованы библиотеки
LINK : warning LNK4068: параметр /MACHINE не указан; принимается по умолчанию на
X86
LINK : error LNK2001: неразрешенный внешний символ “__DllMainCRTStartup@12″
lua51.dll : fatal error LNK1120: 1 неразрешенных внешних элементов
print.c
c1 : fatal error C1083: Не удается открыть файл источник: print.c: No such file
or directory
Создание кода…
C:\lua-5.1.4\etc>del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathl
ib.obj loslib.obj ltablib.obj lstrlib.obj loadlib.obj
Не удается найти C:\lua-5.1.4\etc\lua.obj
C:\lua-5.1.4\etc>link /nologo /out:luac.exe *.obj
LINK : warning LNK4001: не указаны объектные файлы; использованы библиотеки
LINK : warning LNK4068: параметр /MACHINE не указан; принимается по умолчанию на
X86
LINK : fatal error LNK1561: точка входа должна быть определена
C:\lua-5.1.4\etc>if exist luac.exe.manifest mt /nologo -manifest luac.exe.manife
st -outputresource:luac.exe
C:\lua-5.1.4\etc>del *.obj *.manifest
Не удается найти C:\lua-5.1.4\etc\*.obj
Всё куда проще чем кажется. Спасибо за урок. Но я сделал всё по другому. Вот пример
#include “stdafx.h”
#include “lua.hpp”
int main(int argc, char** argv)
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
Автор, спасибо, хорошая статья, всё работает!
Не за что Очень рад, что у Вас всё получилось!
Да только что-то, под MSVC 2010 не могу скопилить, хотя либы подключил…
Что говорит? Какие ошибки?
Спасибо гуглу, за то, что я смог повторить то же самое в xcode.
Василий подскажи сайт где описано как подключить lua к xcode. А то ничего толкового найти не могу.
»crosslinked«
оказался подробный faq есть на сайте lua.org, кто бы мог подумать ))))
А как на счет компиляции LUA ? Будут статьи?
Папку с lua распаковал в диск С
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
c:\program files\microsoft visual studio 10.0\vc\bin>cd C:/lua-5.1.4
C:\lua-5.1.4>etc
“etc” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\lua-5.1.4>/etc
“/etc” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\lua-5.1.4>cd C:/lua-5.1.4/etc
C:\lua-5.1.4\etc>cd C:/lua-5.1.4/etc/luavs
Системе не удается найти указанный путь.
C:\lua-5.1.4\etc>luavs
C:\lua-5.1.4\etc>cd src
Системе не удается найти указанный путь.
C:\lua-5.1.4\etc>cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /DLUA_BUIL
D_AS_DLL l*.c
l*.c
c1 : fatal error C1083: Не удается открыть файл источник: l*.c: Invalid argument
C:\lua-5.1.4\etc>del lua.obj luac.obj
Не удается найти C:\lua-5.1.4\etc\lua.obj
C:\lua-5.1.4\etc>link /nologo /DLL /out:lua51.dll l*.obj
LINK : warning LNK4001: не указаны объектные файлы; использованы библиотеки
LINK : warning LNK4068: параметр /MACHINE не указан; принимается по умолчанию на
X86
LINK : error LNK2001: неразрешенный внешний символ “__DllMainCRTStartup@12″
lua51.dll : fatal error LNK1120: 1 неразрешенных внешних элементов
C:\lua-5.1.4\etc>if exist lua51.dll.manifest mt /nologo -manifest lua51.dll.mani
fest -outputresource:lua51.dll;2
C:\lua-5.1.4\etc>cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /DLUA_BUIL
D_AS_DLL lua.c
lua.c
c1 : fatal error C1083: Не удается открыть файл источник: lua.c: No such file or
directory
C:\lua-5.1.4\etc>link /nologo /out:lua.exe lua.obj lua51.lib
LINK : fatal error LNK1181: не удается открыть входной файл “lua.obj”
C:\lua-5.1.4\etc>if exist lua.exe.manifest mt /nologo -manifest lua.exe.manifest
-outputresource:lua.exe
C:\lua-5.1.4\etc>cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE l*.c print
.c
l*.c
c1 : fatal error C1083: Не удается открыть файл источник: l*.c: Invalid argument
print.c
c1 : fatal error C1083: Не удается открыть файл источник: print.c: No such file
or directory
Создание кода…
C:\lua-5.1.4\etc>del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathl
ib.obj loslib.obj ltablib.obj lstrlib.obj loadlib.obj
Не удается найти C:\lua-5.1.4\etc\lua.obj
C:\lua-5.1.4\etc>link /nologo /out:luac.exe *.obj
LINK : warning LNK4001: не указаны объектные файлы; использованы библиотеки
LINK : warning LNK4068: параметр /MACHINE не указан; принимается по умолчанию на
X86
LINK : fatal error LNK1561: точка входа должна быть определена
C:\lua-5.1.4\etc>if exist luac.exe.manifest mt /nologo -manifest luac.exe.manife
st -outputresource:luac.exe
C:\lua-5.1.4\etc>del *.obj *.manifest
Не удается найти C:\lua-5.1.4\etc\*.obj
C:\lua-5.1.4\etc>cd ..
C:\lua-5.1.4\etc>
Всё куда проще чем кажется. Спасибо за урок. Но я сделал всё по другому. Вот пример
#include “stdafx.h”
#include “lua.hpp”
int main(int argc, char** argv)
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
if (luaL_dofile(L, “test.lua”))
{
const char* err = lua_tostring(L, -1);
printf(err);
}
lua_close(L);
getchar();
return 0;
}