2012-08-07 7 views
6

tengo el siguiente archivo C:intento de llamar mundial `print'(un valor nulo)

//thing.c 
#include <lua.h> 
#include <lauxlib.h> 
#include <lualib.h> 

#include <stdio.h> 

lua_State* L; 

int main(){ 
     L = lua_open(); 

     lua_dostring(L, "print(\"lua\")"); 
     printf("hello\n"); 

     return 0; } 

y el siguiente archivo MAKE:

default: 
     gcc -I/usr/include/lua50 -L/usr/lib -o qwerty thing.c -llua50 -llualib50 

el código construye muy bien, pero cuando ejecutarlo me sale el siguiente:

[string "print("lua")"]:1: attempt to call global `print' (a nil value) 
hello 

Nota: he visto las muchas otras preguntas en este error, pero todos se ocupan de trabajar directamente en Lua, a diferencia de con la C api. También parecen dar a entender que el problema es que la función print nunca se definió. No entiendo esto, ya que puedo ejecutar tanto un intérprete lua como un script lua directamente desde la línea de comando.

EDITAR: Estoy utilizando Lua 5.0

Respuesta

9

usted tiene que inicializar las bibliotecas de Lua. Después de llamar lua_open, llame

luaL_openlibs(L); 

Editar: para Lua 5.0, creo que vas a tener que abrir manualmente las bibliotecas. Para la función print, sólo tiene la biblioteca de la base:

luaopen_base(L); 
+0

'thing.c :(texto + 0x20):. Undefined reference to 'luaL_openlibs'' Notable: Estoy utilizando Lua 5.0 – ewok

+0

@ewok, consulte edición . Sin embargo, dado que obtiene un error de enlace (y no un error del compilador), creo que puede incluir el encabezado 5.1 o 5.2, pero vinculando la biblioteca 5.0. Veo que está especificando la ruta de inclusión 5.0, pero me pregunto si tiene los encabezados 5.1 o 5.2 en algún lugar de su ruta de inclusión predeterminada. –