2012-08-07 37 views
6

我有下面的C文件:試圖調用全球'打印」(一個零值)

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

和下面的Makefile:

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

的代碼編譯就好了,但是當我運行它,我得到以下幾點:

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

注意:我見過的許多其他問題在這個錯誤,但他們都處理直接在Lua工作,而不是與C api。他們似乎也暗示問題在於print函數從未被定義過。我不明白這一點,因爲我可以直接從命令行運行lua解釋器和lua腳本。

編輯:我用LUA 5.0

回答

9

你必須初始化在Lua庫。你叫lua_open後,調用

luaL_openlibs(L); 

編輯:爲lua 5.0,我認爲你必須手動打開庫。對於print功能,你只需要基本庫:

luaopen_base(L); 
+0

'thing.c :(文字+ 0×20):未定義的引用「luaL_openlibs''值得注意的是:我用LUA 5.0 – ewok 2012-08-07 16:11:40

+0

@ewok,看到編輯。但是,由於你得到一個鏈接錯誤(而不是編譯器錯誤),我認爲你可能包括5.1或5.2頭,但是鏈接5.0庫。我看到你指定了5.0包含路徑,但是我想知道你的默認包含路徑中是否有5.1或5.2頭文件? – 2012-08-07 16:26:22

相關問題