在 Arch Linux 上尝试使用 C 编写 Lua 模块会崩溃
2021-8-17 2:48:22
收藏:0
阅读:118
评论:1
我编写了下面这个 C 文件(用于 lua 5.1)bar_src.c
:
#include <lua5.1/lua.h>
#include <lua5.1/lauxlib.h>
#include <lua5.1/lualib.h>
static int foo(lua_State *L)
{
int a = luaL_checknumber(L, 1);
int b = luaL_checknumber(L, 2);
lua_pushnumber(L, a + b);
return 1;
}
luaL_Reg foolib[] = {
{"foo", foo},
{NULL, NULL}
};
int luaopen_bar(lua_State *L)
{
luaL_register(L, "bar", foolib);
return 1;
}
然后使用 gcc -shared -fpic -o bar.so bar.c -llua5.1
进行编译。
但是,无论何时我尝试在 lua 中运行 require("bar")
,它都会立即出现 segmentation fault (core dumped)
错误。
我想尝试在另一个系统上运行,所以我在 repl.it 上执行了相同的操作(使用 Ubuntu 18.04 运行),一切都完美工作,这意味着我的 Linux 配置存在问题。
编辑:
我在 /var/lib/systemd/coredump
中找到了崩溃的核心转储,并使用 gdb $(which lua) /var/lib/systemd/coredump/core.lua.[file]
将其加载到 GDB 中,然后 GDB 说:
Core was generated by `lua'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00005620820f3ad3 in lua_pushvalue ()
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
问题是我正在使用lua 5.4解释器,我应该使用
lua5.1
命令运行它。在这个例子中,我使用了旧版本的Lua,Lua 5.1,但是Lua的arch包中安装了5.1,5.2,5.3和最新的5.4。虽然没有太多的5.4文档,但有一个参考手册。编译器说函数
luaL_register
不在Lua 5.4中,但我在手册中找到了一个叫做luaL_newlib()
的替代函数。我将我的代码改成了这样:
#include <lua5.1/lua.h> #include <lua5.1/lauxlib.h> #include <lua5.1/lualib.h> static int foo(lua_State *L) { int a = luaL_checknumber(L, 1); int b = luaL_checknumber(L, 2); lua_pushnumber(L, a + b); return 1; } luaL_Reg foolib[] = { {"foo", foo}, {NULL, NULL} }; int luaopen_bar(lua_State *L) { luaL_newlib(L, foolib); return 1; }
这段代码可以完美编译,当我要求它时,没有出现segfaults。