【问题标题】:attempt to call global `print' (a nil value)尝试调用全局“打印”(一个零值)
【发布时间】:2012-08-07 16:06:43
【问题描述】:

我有以下 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

【问题讨论】:

    标签: c lua embedding


    【解决方案1】:

    您必须在 Lua 中初始化库。拨打lua_open后,拨打

    luaL_openlibs(L);
    

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

    luaopen_base(L);
    

    【讨论】:

    • thing.c:(.text+0x20): undefined reference to 'luaL_openlibs' 值得注意的是:我使用的是 lua 5.0
    • @ewok,见编辑。但是,由于您遇到链接错误(而不是编译器错误),我认为您可能包含 5.1 或 5.2 标头,但链接了 5.0 库。我看到您正在指定 5.0 包含路径,但我想知道您的默认包含路径中是否有 5.1 或 5.2 标头?
    猜你喜欢
    • 2013-12-15
    • 2019-09-06
    • 2020-10-20
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多