Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с lua


Автор: Duplex 24.9.2007, 20:38
Решил изучить Lua, и сразу проблема при компиляции такого кода 
Код

#include <stdio.h>
extern "C"
{
 #include <lua.h>
}
 
int main(int argc, char* argv[ ])
{
   lua_State* luaVM = lua_open(0);
 
   if (NULL == luaVM)
   {
      printf("Error Initializing lua\n");
      return -1;
   }
 
   return 0;
}


компилятор выдает ошибку
Код

------ Build started: Project: lua_test, Configuration: Debug Win32 ------

Compiling...
main.cpp
d:\documents and settings\dup13x\рабочий стол\lua_test\main.cpp(9) : warning C4002: too many actual parameters for macro 'lua_open'
d:\documents and settings\dup13x\рабочий стол\lua_test\main.cpp(9) : error C3861: 'luaL_newstate': identifier not found, even with argument-dependent lookup

Build log was saved at "file://d:\Documents and Settings\Dup13X\Рабочий стол\lua_test\Debug\BuildLog.htm"
lua_test - 1 error(s), 1 warning(s)


---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped


что делать что не так? я новичок.

Автор: Lazin 25.9.2007, 07:50
Код написан для другой версии библиотеки, смотри документацию на оф. сайте.

Автор: Duplex 25.9.2007, 12:23
В жокументации я нашел те же самые примеры, которые также выдают ошипки. Не могли бы вы показать на своих примерах?

Автор: Lazin 25.9.2007, 13:19
Я когдато давно пробовал играться с этой библиотекой, сначала взял пример из статьи, попробовал скомпилировать - не получилось. В результате оказалось что интерфейс библиотеки (5-й версии) был изменен. В твоем случае макрос lua_open() должен вызываться без параметров. 
Найду на домашнем компе примеры - выложу.

Автор: Duplex 25.9.2007, 14:12
Всеравно даже если не передаешь аргумент возникают ошибки... буду ждать твоих кодов

Автор: bsa 25.9.2007, 14:16
Duplex, а может стоит воспользоваться Google и поискать примеры в инете?  smile 

Автор: Lazin 26.9.2007, 07:44
В архиве с исходниками lua есть папка etc, там есть пример вызова ф-ии.
Вот мой код, но я толком не разобрался.
По идее должен выполниться скрипт test.lua и вывести на консоль Hello World
Код

#include <stdio.h>

extern "C"
{
 #include <lua.h>
 #include <lualib.h>
 #include <lauxlib.h>
}

int main(int argc, char* argv[ ])
{
    int iErr = 0;
    lua_State *lua = lua_open ();  // Open Lua
    luaopen_base(lua);     /* opens the basic library */
    luaopen_table(lua);    /* opens the table library */
    luaopen_io(lua);       /* opens the I/O library */
    luaopen_string(lua);   /* opens the string lib. */
    luaopen_math(lua);     /* opens the math lib. */

    if ((iErr = luaL_loadfile (lua, "test.lua")) == 0)
    {
       // Call main...
       if ((iErr = lua_pcall (lua, 0, LUA_MULTRET, 0)) == 0)
       {
          // Push the function name onto the stack
          lua_pushstring (lua, "helloWorld");
          // Function is located in the Global Table
          lua_gettable (lua, LUA_GLOBALSINDEX);
          lua_pcall (lua, 0, 0, 0);
       }
    }
    lua_close (lua);
    return 0;
}

Собственно скрипт
Код

-- Lua Hello World (test.lua)
function helloWorld ()
   io.write ("hello World")
   trace ("trace working now :)")
end


В папке doc есть мануал, в нем есть раздел по С API.
Ну и http://borland.xportal.ru/forum/viewtopic.php?t=21844&highlight=lua

Автор: Duplex 26.9.2007, 07:50
У меня выскочили ошипки при компиляции

Код

------ Build started: Project: lua2, Configuration: Debug Win32 ------

Compiling...
main.cpp
Linking...
main.obj : error LNK2019: unresolved external symbol _lua_close referenced in function _main
main.obj : error LNK2019: unresolved external symbol _lua_gettable referenced in function _main
main.obj : error LNK2019: unresolved external symbol _lua_pushstring referenced in function _main
main.obj : error LNK2019: unresolved external symbol _lua_pcall referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaL_loadfile referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaopen_math referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaopen_string referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaopen_io referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaopen_table referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaopen_base referenced in function _main
main.obj : error LNK2019: unresolved external symbol _luaL_newstate referenced in function _main
Debug/lua2.exe : fatal error LNK1120: 11 unresolved externals

Build log was saved at "file://d:\Documents and Settings\Dup13X\Рабочий стол\lua2\Debug\BuildLog.htm"
lua2 - 12 error(s), 0 warning(s)


---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped

Автор: Lazin 26.9.2007, 07:57
Так нужно сначала собрать библиотеку. В общем там есть make-файл он собирает lua.exe luac.exe lua-5.1.a lua-5.1.dll, тебе нужно подключить к проекту статическую библиотеку.
http://lua-users.org/wiki/SampleCode

Автор: Duplex 26.9.2007, 09:35
Спасибо, почему-то я забыл про подключение библеотеки.

Автор: Duplex 26.9.2007, 14:17
Хмм... если вызвать функцию luaopen_io(), то при открытие программы выводится PANIC: unprotected error in call to LUA Api <no calling evironment>

Автор: Lazin 27.9.2007, 07:51
Попробуй вместо этого 
void luaL_openlibs (lua_State *L);

Автор: Duplex 27.9.2007, 08:33
Да я понял уже, просто забыл отписаться. Ладно тему можно закрыть. Только вот получается что все хелпы на русском языке для Lua устарели и надо все искать на офф сайте. 

Автор: Lazin 27.9.2007, 09:10
Цитата(Duplex @  27.9.2007,  08:33 Найти цитируемый пост)
Да я понял уже, просто забыл отписаться. Ладно тему можно закрыть. Только вот получается что все хелпы на русском языке для Lua устарели и надо все искать на офф сайте.  

Кстати lua 5.1 вышла в 2003м году, русские хэлпы оч. сильно устарели.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)