2

我读过这个并且:

  1. 没有提出可行的解决方案
  2. 我运行的不是 Windows,而是 Linux
  3. 这是一个自制的汇编
  4. 跑步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和/或cpathlua 正在使用的内容?

在我的文件中,当我在require "bb"文件中有指令aa.lua并且与bb.lua位于相同的路径时aa.lua,它可以工作。如果我尝试export LUA_PATH=重新启动我的网络服务器,则该指令require "bb"aa.lua. 这意味着环境变量对 ApacheLUA_PATHLUA_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 链接,并重新编译了luaposixlib。现在网页给了我这个:function: 0x220bce0,nil这意味着它成功地打开了图书馆。

知道发生了什么吗?

4

1 回答 1

2

我成功了!

有两件事被阻止,如果他们有同样的问题,我希望能帮助其他人:

  1. 错误的版本号。mod_lua是5.1,lua安装是5.2。解决方案:删除5.2并安装5.1,然后重新编译所有需要的模块
  2. 位置不好*.so。这个命令帮助我解决了这个问题:r:puts(tostring(package.cpath) .. ',\n'). 它显示了lua寻找动态库的路径。没有人匹配我lfs.soposix_c.so, 和posix.lua。因此,我创建了文件夹/usr/local/lib/lua/5.1/(对我来说这是非常“干净”的名称和位置)并将这些文件复制到那里。

现在一切正常。

于 2014-05-11T15:57:09.073 回答