2016-06-11 17 views
1

DLL用のluaモジュールをいくつか作成しましたが、いくつかの依存関係があります。これらの依存関係は、モジュールDLLが正しく機能するために必要です。これらの依存関係のほとんどは、C++ランタイムライブラリ(libstdc + -6.dllおよびlibgcc_s_seh-1.dll)です。私はpackage.loadlib呼び出しを使用してモジュールをロードしようとしています:Lua DLLライブラリの依存関係

init = assert(package.loadlib("C:\\Path\\To\\My\\Module.DLL", "luaopen_MyModule")) 
init() 

依存関係およびモジュールのDLLは、メインの実行可能ファイルのDLLとは別のフォルダにあります。このため、package.loadlibはモジュールの依存関係を見つけることができないようです。これらの依存関係へのパスがPATH変数に追加されてもうまく動作しますが、luaモジュールが使用されるマシンでPATHを変更することはできません。また、依存関係を静的にリンクすることもできません。

ルアの依存関係の検索パスを指定する方法はありますか? luaはWindowsシステムでのみ使用されるため、ソリューションはプラットフォームに依存する可能性があります。

+0

あなたはそれらのDLLのは、一緒にバンドルされており、あなたのdllと一緒に移動されている必要がありますでしょうか? 'libstdC++ - 6.dll'をdllに静的にリンクして、外部のDLLが必要ないようにすることもできます。 Mingwにはこのオプションがありますが、それがどのように呼び出されたのかは覚えていません。 –

+0

他のdllは、私のdllと同じフォルダにありますが、メインの実行可能プログラム以外のフォルダにあります。探しているオプションは-staticですが、標準ライブラリに静的リンクを使用することはできません。 – Shadowwolf

+0

余分なものがあります: '-static-libstdC++'もっと見るhttp://stackoverflow.com/questions/14225083/linking-with-static-libstdc-flag-on-mingw-4-7-1 'seh' dllに相当するものがあるかどうかは分かりません。 –

答えて

3

これらの依存関係を静的に含める方法やDLL検索に影響するようにPATHを変更する方法がない場合は、Module.DLLをロードする前に同じpackage.loadlibコールを使用して直接依存関係をロードすることもできます。私は私が私のライブラリが依存DLLが正しい場所からロードされたことを確認したかったときの状況でこれを使用:

package.loadlib([[C:\Path\To\Whatever\libstdc++-6.dll]], "") 
init = assert(package.loadlib("C:\\Path\\To\\My\\Module.DLL", "luaopen_MyModule")) 
init() 
+0

これは素晴らしい作品です。ご協力いただきありがとうございます。 – Shadowwolf