【问题标题】:embedding lua code in c在c中嵌入lua代码
【发布时间】:2012-07-31 04:04:08
【问题描述】:

我正在尝试遵循here 给出的关于将 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 安装正确。有没有其他人遇到过这些问题?如果这是一个糟糕的教程,请随时将我引向一个击球手。

【问题讨论】:

  • 链接器声称它已经搜索了您给它的路径,但无法找到有问题的库。事实上,/usr/local/lib 中是否有一个名为 liblualib.soliblualib.a 的文件?
  • @BrianCain 没有。事实上,/usr 中的任何地方都没有 liblualib.aliblualib.so。知道我需要安装什么吗?

标签: c lua


【解决方案1】:

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

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

【讨论】:

  • 我正在使用 ArchLinux。我在pacman 中搜索了lua-devel 并没有得到任何结果
  • 基于 Debian 的发行版通常称其为 X-dev(与 redhat-alikes 中的 X-devel 相对)。不确定 Arch 落在哪里,但在 lua-dev 下似乎值得一看。
  • 搜索 ArchLinux 的软件包数据库,发现 liblualib 确实 存在于 Arch。只有 liblua.so(在包 lua 中)存在。我会为后代保留这个答案,以防其他人有类似的问题可以通过它解决。
  • 而且我看不出投反对票的理由,+1 表示补偿。
【解决方案2】:

我在嵌入 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_* 函数。 Here's the relevant 5.1 reference manual entry.(我假设您使用的是 5.1,因为这似乎是软件包中可用的版本)至于更好的教程,我建议使用 Programming in Lua 书。不幸的是,它是为 Lua 5.0 编写的。它仍然主要相关,但我建议您也查看 5.1 参考手册的相关部分。

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2012-01-23
    • 2013-09-11
    • 2011-07-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多