gpt4 book ai didi

从源代码编译 Lua 并用它创建 C 模块

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:56 27 4
gpt4 key购买 nike

我想到了从源代码编译Lua,然后创建一个C模块。我成功编译了 Lua,但无法构建我的 C 模块。

所以,我这样编译Lua:

gcc -o Lua *.c -Os -std=c99

像这样编译我的模块:

gcc -Wall -shared -fPIC -o module.so -I. module.c

但是这里有一些错误:

Undefined symbols for architecture x86_64:
"_lua_pushcclosure", referenced from:
_luaopen_module in module-fb0b1f.o
"_lua_pushnumber", referenced from:
_super in module-fb0b1f.o
"_lua_setglobal", referenced from:
_luaopen_module in module-fb0b1f.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

C 模块本身:

#include "lua.h"


static int super(lua_State* L) {
lua_pushnumber(L, 5);
return 1;
}

int luaopen_module(lua_State* L) {
lua_register(L, "super", super);
return 0;
}

我的 Lua 脚本:

require("module")
print(super())

我在基于 Unix 的系统 (Mac) 上,但我希望它也能在 Linux 上运行。

编辑:

通过输入 -bundle -undefined dynamic_lookup 而不是 -shared 修复了编译 C 模块的问题(感谢 lhf)。但是我无法在 Lua 中导入模块。

> require("module")
error loading module 'module' from file './module.so':
dynamic libraries not enabled; check your Lua installation

另一件事:这似乎只是一个快速修复; -bundle -undefined dynamic_lookup。这在 Linux 上不起作用。我怎样才能在 Linux 上执行此操作?我想要一个基于 Unix 系统的解决方案。

最佳答案

  • lua.org 下载 Lua并使用 make macosx 构建 Lua。参见 Getting started .

  • 使用 -bundle -undefined dynamic_lookup 而不是 -shared 来构建 module.so

  • 使用require"module"将其加载到Lua中。

  • 调用super

确保您正在运行上面构建的 lua 程序,而不是已安装的其他版本。

关于从源代码编译 Lua 并用它创建 C 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40842842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com