2

我正在尝试遵循此处给出的关于将 lua 嵌入 C 的基本指南。我将代码逐字复制到我自己的 embed.c 文件中,并执行列出的确切编译器命令:

cc -o embed embed.c \
            -I/usr/local/include \
            -L/usr/local/lib \
            -llua -llualib

我得到错误:

embed.c:19:14: error: invalid storage class for function ‘openlualibs’

之后,我将函数移到 之外main,再次编译,得到:

/usr/bin/ld: cannot find -llualib

我不知道为什么我不能编译这个。lua 安装正确。有没有其他人遇到过这些问题?如果这是一个糟糕的教程,请随时简单地将我引向一个击球手。

4

2 回答 2

5

在某些 Linux 发行版上,您可能需要安装lua-devel(或类似名称的)包,以便获得针对该包编译和链接项目所需的正确头文件和库符号链接。liblualib-<version>.so.<version>例如,如果你确实有一个,liblualib-5.so.5.0你可能需要安装 devel 包。

从 lua 5.1 开始,liblualib不存在。以下是发布公告: http: //lua-users.org/lists/lua-l/2005-05/msg00186.html

于 2012-07-30T19:30:39.113 回答
1

嵌入 Lua 时,我遇到了一些类似的问题。我发现对我有用的是链接动态链接库(dl)和数学库(m)。如果您不使用 lmath 标准库,则可能不需要数学库。

cc -o embed embed.c -I/usr/local/include -L/usr/local/lib -llua -lm -ldl

当然,这假设 /usr/local/ 是 Lua 文件的安装位置,这可能是正确的。

至于您链接到的教程,我认为它可能已经过时了。除了不再存在的 liblualib 之外,还有单独的函数可以打开每个标准库。这些是 luaopen_* 函数。这是相关的 5.1 参考手册条目。(我假设您使用的是 5.1,因为这似乎是包中可用的版本) 至于更好的教程,我建议使用Programming in Lua书。不幸的是,它是为 Lua 5.0 编写的。它仍然主要相关,但我建议您也查看 5.1 参考手册的相关部分。

于 2012-07-30T20:04:08.187 回答