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_getglobal
和 lua_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 未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章
错误: - 未定义引用 `_imp__GetStockObject@4' 和未定义引用 `_imp__SetBkMode@8'