2012-08-07 38 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

相关问题