Luaのダイナミックリンクインスタンス
1011 ワード
C言語アプリケーションでは、動的リンクメカニズムを使用して各モジュールを統合することが多い.しかし,動的リンク機構はANSI C規格の一部ではなく,実現方法は移植できない.
Luaは通常、動的リンクが例外である場合、ANSI Cによって実現できないメカニズムを含まない.Luaは移植性に対する準則を破り、いくつかのプラットフォームのために動的リンクメカニズムを実現した.
package.loadlibはダイナミックリンク機能の核心関数であり、2つのパラメータを受信します:ダイナミックライブラリの完全なパス名、関数名.
loadlib関数は、指定したライブラリをロードし、Luaにリンクします.あなたが考えているように、ライブラリ内の任意の関数を呼び出すのではなく、1つのC関数をLua関数として返します.load中にエラーが発生した場合はnilを返します.
loadlibは比較的下位レベルの関数で、通常requireを使用してCライブラリをロードします.この関数は指定したライブラリを検索し、loadlibを呼び出してライブラリをロードし、初期化関数を返します.この初期化関数はライブラリに提供された関数をLuaに登録する必要があります.
簡単な例として:
コンパイル:gcc-o libhello.so -fPIC -shared hello.c
hello()関数は比較的簡単で,パラメータがなく,戻り値がなく,具体的なインタフェース仕様はまだ検討する必要がある.
Luaは通常、動的リンクが例外である場合、ANSI Cによって実現できないメカニズムを含まない.Luaは移植性に対する準則を破り、いくつかのプラットフォームのために動的リンクメカニズムを実現した.
package.loadlibはダイナミックリンク機能の核心関数であり、2つのパラメータを受信します:ダイナミックライブラリの完全なパス名、関数名.
loadlib関数は、指定したライブラリをロードし、Luaにリンクします.あなたが考えているように、ライブラリ内の任意の関数を呼び出すのではなく、1つのC関数をLua関数として返します.load中にエラーが発生した場合はnilを返します.
loadlibは比較的下位レベルの関数で、通常requireを使用してCライブラリをロードします.この関数は指定したライブラリを検索し、loadlibを呼び出してライブラリをロードし、初期化関数を返します.この初期化関数はライブラリに提供された関数をLuaに登録する必要があります.
簡単な例として:
hello.c
#include
void hello(){
printf("hello,world
");
}
コンパイル:gcc-o libhello.so -fPIC -shared hello.c
> f = package.loadlib('${pathhere}/libhello.so', 'hello')
> f()
hello,world
hello()関数は比較的簡単で,パラメータがなく,戻り値がなく,具体的なインタフェース仕様はまだ検討する必要がある.