LuaJIT 未定义的引用

Posted

技术标签:

【中文标题】LuaJIT 未定义的引用【英文标题】:LuaJIT undefined references 【发布时间】:2021-09-17 02:15:52 【问题描述】:

我正在尝试针对liblluajit-5.1 编译和链接以下C 程序(我在Linux 上安装了LuaJIT 版本2.0.5):

#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

int main(int argc, char **argv)

  int status;

  lua_State *L = luaL_newstate();
  luaL_openlibs(L);

  lua_getglobal(L, "require");
  lua_pushliteral(L, "mod");

  lua_pcall(L, 1, 0, 0);

  // ...

  return 0;

由于未定义对 lua_getgloballua_pcallk 的引用,此操作失败。为什么? LuaJIT 是否只实现了 C API 的一个子集,并且我必须另外链接到 liblua

我正在编译和链接:

gcc -Wl,-E -o prog prog.c -lluajit-5.1 -lm -ldl

【问题讨论】:

可能无法在路径中找到该库。在运行 gcc 之前尝试 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lluajit-5.1 @kiner_shah: GCC 肯定找到了 luajit,就在 /usr/lib 下。 你的系统路径中有/usr/lib吗?您如何检查 GCC 是否找到了该库? 另外,您的包含路径是否也在系统路径中?如果是,那么哪些头文件具有这两个功能?此外,您可以使用strings /usr/lib/<library_name> | grep "lua_getglobal" 命令或nm 命令检查库中是否存在函数。 实际上包含问题,我会发布答案。 【参考方案1】:

问题很简单:我必须包含

#include "luajit-2.0/lua.h"
#include "luajit-2.0/lauxlib.h"
#include "luajit-2.0/lualib.h"

而不是标准的 Lua 头文件。

【讨论】:

可能是系统 Lua 标头用于 Lua 5.3 或更新版本,而 LuaJIT 公开了 Lua 5.1 API。

以上是关于LuaJIT 未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章

无法设置未定义或null引用的属性“onclick”

C语言里面对啥未定义引用是啥意思?

错误: - 未定义引用 `_imp__GetStockObject@4' 和未定义引用 `_imp__SetBkMode@8'

未捕获的引用错误 - 未定义函数

VB中子程序或函数未定义是啥意思

未捕获的引用错误:未定义回调