我有以下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
答案 0 :(得分:9)
您必须在Lua中初始化库。致电lua_open
后,请致电
luaL_openlibs(L);
编辑:对于Lua 5.0,我相信您必须手动打开库。对于print
函数,您只需要基础库:
luaopen_base(L);