私が書いている lua プラグインで、次のメッセージのように、lua ランタイムの 2 つのコピーにリンクすることを示すエラーが表示されます: http://lua-users.org/lists/lua-l/2008- 01/msg00671.html
見積もり:
これは、ダミーノードの等価性テストが失敗していることを意味します。これは、Lua コアの 2 つのコピーをアプリケーションにリンクした場合によくある症状です (ダミーノードの 2 つのインスタンスが表示されます)。
一般的なエラーは、C 拡張モジュール (共有ライブラリ) を静的ライブラリにリンクすることです。拡張モジュールのリンカ コマンド ラインには、-llua などを含めてはなりません。
Lua コア シンボル (lua_insert() など) は、Lua コア自体を含む実行可能ファイルからのみエクスポートされます。その後ロードされたすべての C 拡張モジュールは、これらのシンボルにアクセスできます。ELF システムでは、これがリンカー行の -Wl,-E です。すべての非静的シンボルがエクスポートされるため、MACH-O システムではこれは必要ありません。
これはまさに私が見ているエラーです...私が知らないのは、代わりに何をすべきかです。
lua プラグインの c コンポーネントである DLL のインクルード パスに lua src ディレクトリを追加しましたが、リンクすると次のようなエラーが山積みになります。
Creating library file: libmo.dll.a
CMakeFiles/moshared.dir/objects.a(LTools.c.obj): In function `moLTools_dump':
d:/projects/mo-pong/deps/mo/src/mo/lua/LTools.c:38: undefined reference to `lua_gettop'
d:/projects/mo-pong/deps/mo/src/mo/lua/LTools.c:47: undefined reference to `lua_type'
d:/projects/mo-pong/deps/mo/src/mo/lua/LTools.c:48: undefined reference to `lua_typename'
d:/projects/mo-pong/deps/mo/src/mo/lua/LTools.c:49: undefined reference to `lua_tolstring'
要約すると、私はこのような状況にあります:
lua ランタイムに静的にリンクされている親バイナリ。
C コードを含む DLL をロードする lua ライブラリ。
DLL 内の C コードは、lua c API (例: lua_gettop()) を呼び出す必要があります。
どうすればそれをリンクできますか? 確かに、動的ライブラリは親バイナリのシンボルを「見る」ことができません。親バイナリは DLL からシンボルをロードしていないため、静的にリンクされているためです。
...しかし、プラグインの一部としてシンボルをリンクすると、上記のエラーが発生します。
ヘルプ?これは多く発生するはずの問題のように思えます (dll は親バイナリのシンボルに依存します。どのようにリンクしますか?) が、それに関する有用なスレッドが見当たらないようです。
(あなたが尋ねる前に、いいえ、私は親バイナリを制御できず、DLL から lua シンボルをロードすることはできません)