2012-08-07 14 views
6

ho il seguente file C:tentativo di chiamata globale `print'(un valore nullo)

//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; } 

e la seguente makefile:

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

il codice costruisce bene, ma quando ho eseguirlo ottengo il seguente:

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

Nota: ho visto le molte altre domande su questo errore, ma tutti si occupano di lavorare direttamente a Lua, al contrario di C api. Sembrano anche implicare che il problema è che la funzione print non è mai stata definita. Non lo capisco, dato che posso eseguire sia un interprete lua che uno script lua direttamente dalla riga di comando.

EDIT: Sto usando Lua 5,0

risposta

9

si deve inizializzare le librerie in Lua. Dopo aver chiamato lua_open, chiamare

luaL_openlibs(L); 

Edit: per Lua 5.0, credo che si dovrà aprire le librerie manualmente. Per la funzione print, basta la libreria di base:

luaopen_base(L); 
+0

'thing.c :(testo + 0x20):. Undefined reference to 'luaL_openlibs'' Degno di nota: Sto usando Lua 5.0 – ewok

+0

@ewok, vedere modifica . Tuttavia, poiché stai ricevendo un errore di collegamento (e non un errore del compilatore), penso che potresti includere l'intestazione 5.1 o 5.2, ma collegare la libreria 5.0. Vedo che stai specificando il percorso di inclusione 5.0, ma mi chiedo se hai le intestazioni 5.1 o 5.2 da qualche parte nel percorso di inclusione predefinito? –

Problemi correlati