2012-08-07 5 views
6

Ich habe die folgende C-Datei:Versuch global `print‘ zu nennen (ein Null-Wert)

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

und die folgende Make-Datei:

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

der Code nur in Ordnung baut, aber wenn ich führen sie es ich folgendes erhalten:

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

Hinweis: ich habe die vielen anderen Fragen gesehen auf diesen Fehler, aber sie alle befassen sich mit der Arbeit direkt in Lua, im Gegensatz zu mit dem CAPI. Sie scheinen auch zu implizieren, dass das Problem darin besteht, dass die print-Funktion nie definiert wurde. Ich verstehe das nicht, da ich sowohl einen Lua-Interpreter als auch ein Lua-Skript direkt von der Kommandozeile ausführen kann.

EDIT: Ich bin mit lua 5,0

Antwort

9

Sie haben die Bibliotheken in Lua initialisieren. Nachdem Sie lua_open rufen, rufen

luaL_openlibs(L); 

bearbeiten: für Lua 5.0, glaube ich manuell Sie müssen die Bibliotheken öffnen. Für die print Funktion, müssen Sie nur die Basisbibliothek:

luaopen_base(L); 
+0

'thing.c :(text + 0x20):. Undefined Verweis auf‚luaL_openlibs'' Noteworthy: Ich bin mit lua 5,0 – ewok

+0

@ewok finden Sie bearbeiten . Da Sie jedoch einen Verknüpfungsfehler (und keinen Compilerfehler) erhalten, denke ich, dass Sie den 5.1- oder 5.2-Header einschließen, aber die 5.0-Bibliothek verknüpfen. Ich sehe, dass Sie den 5.0 Include-Pfad angeben, aber ich frage mich, ob Sie die 5.1- oder 5.2-Header irgendwo in Ihrem Standard-Include-Pfad haben? –

Verwandte Themen