在Lua中加载C模块
2010-7-19 18:7:18
收藏:0
阅读:147
评论:2
我正在尝试将 lproc 程序例子(在 Programming Lua,第 30 章中描述)加载到 Lua 中,并在某种程度上出现了问题。我正在遵循此链接(http://www.lua.org/pil/26.2.html)以将我的 c 模块加载到 lua 中。以下是我所采取的步骤:
我有一个 lproc.h 和一个 lproc.c(正好包含书中第 30 章中列出的函数)。我正在编译 lproc.c,命令为 --- gcc -c lproc.c -DLUA-USERCONFIG=\"lproc.h\"
我将 lproc.o 打包成一个库,同名。
然后按照指示编译了 lua.c。我的头文件包含宏 LUA_EXTRALIBS 和方法声明。
进入 Lua 解释器,它给出了以下错误:
> require "lproc"
stdin:1: module 'lproc' not found:
no field package.preload['lproc']
no file './lproc.lua'
no file '/opt/local/share/lua/5.1/lproc.lua'
no file '/opt/local/share/lua/5.1/lproc/init.lua'
no file '/opt/local/lib/lua/5.1/lproc.lua'
no file '/opt/local/lib/lua/5.1/lproc/init.lua'
no file './lproc.so'
no file '/opt/local/lib/lua/5.1/lproc.so'
no file '/opt/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'require'
stdin:1: in main chunk
[C]: ?
看起来模块没有注册,我需要从 Lua 中进行什么操作?时间很短,我肯定在做一些可怕的事情,欢迎任何指导。
谢谢,
Sayan
原文链接 https://stackoverflow.com/questions/3260858
点赞
stackoverflow用户1793220
以下是构建适用于 Lua 的 C 库的完整且完全可移植的最小示例(适用于 Lua 5.1-5.3 和 LuaJIT 任何平台):
使用以下 example.c
:
#include <lua.h>
int example_hello(lua_State* L) {
lua_pushliteral(L, "Hello, world!");
return 1;
}
int luaopen_example(lua_State* L) {
lua_newtable(L);
lua_pushcfunction(L, example_hello);
lua_setfield(L, -2, "hello");
return 1;
}
在同一目录中放置此 rockspec 文件,命名为 example-1.0-1.rockspec
:
package = "example"
version = "1.0-1"
source = {
url = "." -- not online yet!
}
build = {
type = "builtin",
modules = {
example = "example.c"
}
}
然后,运行 luarocks make
。它将使用适合您平台的正确标志构建 C 代码。
现在您的模块已准备就绪!
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
> example = require("example")
> print(example.hello())
Hello, world!
>
2017-11-17 12:28:29
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
最简单的方式是创建一个共享库并且动态加载你的 C 模块。这个方式避免了需要重新编译 Lua 解释器。有一些例子可以在 http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/ 中找到,还有一些解释可以在 http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/install.html 和 http://lua-users.org/wiki/BuildingModules 中找到。