我读过这个并且:
- 没有提出可行的解决方案
- 我运行的不是 Windows,而是 Linux
- 这是一个自制的汇编
- 跑步
httpd-2.4.9
所以这是我迄今为止尝试过的,但没有成功:
- 遵循这个建议“我在哪里放置 3rd 方 lua 模块”?
尝试在我的 vhost conf 中为 Lua 添加 PATH 的所有可能性:
LuaPackageCPath /web/htdocs/olivier/doonoo/2/ LuaPackagePath /web/htdocs/olivier/doonoo/2/ LuaPackageCPath /web/htdocs/olivier/doonoo/2 LuaPackagePath /web/htdocs/olivier/doonoo/2 LuaPackageCPath /web/htdocs/olivier/doonoo/2/?.so LuaPackagePath /web/htdocs/olivier/doonoo/2/?.so LuaPackageCPath /web/htdocs/olivier/doonoo/2/? LuaPackagePath /web/htdocs/olivier/doonoo/2/? LuaPackageCPath /web/htdocs/olivier/doonoo/2/ LuaPackagePath /web/htdocs/olivier/doonoo/2/ LuaPackageCPath ./?.so LuaPackagePath ./?.so LuaPackageCPath ./ LuaPackagePath ./ LuaPackageCPath ./? LuaPackagePath ./?
试图放入
lfs.so
我的http文件夹:/local/install/httpd-2.4.9/modules/lua
- 试图把
lfs.so
我的lua共享/usr/local/share/lua/5.2
- 试图放入
lfs.so
更通用的共享/usr/local/share
- 试图放入
lfs.so
共享的http模块/opt/httpd-2.4.9/modules/
现在我还没有找到可行的解决方案。任何想法?顺便说一句,我可以r:notice()
用来写一些信息,那么有没有办法转储path
和/或cpath
lua 正在使用的内容?
在我的文件中,当我在require "bb"
文件中有指令aa.lua
并且与bb.lua
位于相同的路径时aa.lua
,它可以工作。如果我尝试export LUA_PATH=
重新启动我的网络服务器,则该指令require "bb"
在aa.lua
. 这意味着环境变量对 ApacheLUA_PATH
有LUA_CPATH
一定的影响mod_lua
。
现在我尝试了别的东西:动态库。我这样做:
# lua
Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> a,b = package.loadlib('/usr/local/lib/posix_c.so', 'fcntl')
> print (a,b)
function: 0x7fbda3f845b0 nil
>
这意味着它已成功尝试打开 + 获取fcntl
来自posix_c.so
.
现在,如果我尝试将此代码添加到我的 lua 文件中,mod_lua
如下所示:
function handle(r)
r.headers_out['Cache-Control'] = 'no-cache, must-revalidate'
r.headers_out['Expires'] = 'Mon, 26 Jul 1997 05:00:00 GMT'
r.content_type = 'application/json';
local a,b = package.loadlib('/usr/local/lib/posix_c.so', 'fcntl');
r:puts(tostring(a)..','..tostring(b))
return apache2.OK
end
我得到了这个输出:
nil,/usr/local/lib/posix_c.so: undefined symbol: luaL_setfuncs
看完这篇,我猜是哪里出了问题:我安装的是5.2.1版本,mod_lua
是用5.1编译的。所以我删除了 5.2.1,所有 5.2 链接,并重新编译了luaposix
lib。现在网页给了我这个:function: 0x220bce0,nil
这意味着它成功地打开了图书馆。
知道发生了什么吗?