我正在尝试将示例lproc程序(在编程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做什么?时间很短,我做了一件可怕的事,任何方向都会受到欢迎 .
谢谢,
萨扬
2 回答
最简单的方法是创建一个共享库并动态加载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中有解释
这是一个为Lua构建C库的完整且完全可移植的最小示例(适用于Lua 5.1-5.3和LuaJIT,适用于任何平台):
有了
example.c
:将此rockspec文件放在名为
example-1.0-1.rockspec
的同一目录中:然后,运行
luarocks make
. 它将使用您平台的正确标志构建C代码 .您的模块现在可以使用了!