2011-09-10 6 views
1

requireまたはpackage.loadlibでLuaにロードできるライブラリを作成しようとしていますが、これまでのところ失敗しています。ライブラリ自体はC++になっていますが、ライブラリをロードする関数を適切にエクスポートするために必要なステップを実行したことが分かります。一言で言えば、これは私のC/C++コードの該当部分である:ライブラリはCMakeので生成されたMakefileから作成されているpackage.loadlibでライブラリを動的にロードできない

mylib = package.loadlib("libfoo.so", "luaopen_foo") 
print(mylib) -- prints "nil" 

:私のLuaスクリプトで

extern "C" 
{ 

// This line is copied from http://gcc.gnu.org/wiki/Visibility 
// it's actually in a header, including it here for brevity 
#define EXPORT __attribute__((visibility("default"))) 

EXPORT int luaopen_foo(lua_State* L) 
{ 
    luaL_register(L, "Foo", fooL_table); 
    return 0; 
} 

} 

、私はこれを持っています、およびCMakeLists.txtに私はそのような

add_library(foo STATIC ${foo_SOURCES}) 
add_library(foo MODULE ${foo_SOURCES}) 
add_library(foo SHARED ${foo_SOURCES}) 

として、さまざまなオプションでコンパイルしようとしていると、これらのオプションのどれもが動作しているように見えません。

この作業を行うための手順がありますか?私はオンラインで適切にこれを行う方法に関する情報を見つけるのが苦労しているので、どんな指導も歓迎です。私はgccを使ってUbuntuをコンパイルすることを使用しています。

答えて

3

Luaのマニュアルでは、「libnameは、必要に応じてパスと拡張子を含めて、Cライブラリの完全なファイル名でなければなりません。あなたの.soファイルはそのディレクトリにその名前でありますか?

+0

"foo" "libfoo.so"(または共有ライブラリを使用する場合は "libfoo.a")のようなバリエーションを試してみました。しかし、私はちょうど "./libfoo.so"を試してみました。なぜ私は以前にそれを試してみることを考えなかったのか分かりません。 – Alex

+0

ありがとう、./も私の問題を解決:)私は絶対パスを最初に試しても。 –

関連する問題