2

私はこれを読みまし

  1. 提案された実用的なソリューションはありません
  2. WindowsではなくLinuxを実行しています
  3. 自作のまとめです
  4. ランニングhttpd-2.4.9

これが私がこれまでに試したことですが、成功しませんでした:

  • この提案に従ってください「サードパーティの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.sohttpフォルダーに入れようとしました:/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/

そして今、私はまだ有効な解決策を見つけていません。何か案が?ところで、情報を書き込むために使用できるので、lua が使用しているand/orr:notice()をダンプする方法はありますか?pathcpath

私のファイルでは、ファイルにディレクティブがrequire "bb"あり、 と同じパスにある場合、機能します。Web サーバーを実行して再起動しようとすると、ディレクティブが で機能しなくなります。これは、環境変数が Apache に何らかの影響を与えることを意味します。aa.luabb.luaaa.luaexport LUA_PATH=require "bb"aa.luaLUA_PATHLUA_CPATHmod_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
>

これは、正常に open +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 でコンパイルしました。luaposixそこで、5.2.1 と 5.2 のすべてのリンクを削除し、 libを再コンパイルしました。これはfunction: 0x220bce0,nil、ライブラリが正常に開かれたことを意味します。

何が起こっているのか分かりますか?

4

1 に答える 1

2

できました!

2 つのことがブロックされていました。同じ問題が発生した場合は、他の問題を解決したいと考えています。

  1. バージョン番号が間違っています。mod_luaは 5.1 で、luaインストールされたのは 5.2 でした。解決策: 5.2 を削除して 5.1 をインストールし、必要なすべてのモジュールを再コンパイルします。
  2. 悪い*.so場所。このコマンドは、問題の解決に役立ちました: r:puts(tostring(package.cpath) .. ',\n'). luaが動的ライブラリを探しているパスを示します。lfs.soそして、私の、posix_c.so、およびがどこにいるかは誰も一致しませんposix.luaでした。したがって、フォルダーを作成し/usr/local/lib/lua/5.1/(これは私にとって非常に「クリーンな」名前と場所です)、それらのファイルをそこにコピーしました。

これですべてが機能します。

于 2014-05-11T15:57:09.073 に答える