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

和以下生成文件:

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

4

1 回答 1

9

您必须在 Lua 中初始化库。打电话后lua_open打电话

luaL_openlibs(L);

编辑:对于 Lua 5.0,我相信你必须手动打开库。对于该print功能,您只需要基础库:

luaopen_base(L);
于 2012-08-07T16:10:32.890 回答