1

LuaInterfaceにロードする必要がある Lua モジュール ( lpack ) があります。プロジェクトでいくつかの異なる構成を試しましたが、リンクがわかりません。

エラーが発生しますunresolved external symbol "void __stdcall lua_replace(struct lua_State *,int)" (?lua_replace@@YGXPAUlua_State@@H@Z) referenced in function "int __stdcall l_unpack(struct lua_State *)" (?l_unpack@@YGHPAUlua_State@@@Z)

dumpbin /exportslua51.lib ファイルで実行する?lua_replace@@YAXPAUlua_State@@H@Zと、 Dependency Walker を使用して lua51.dll で見つけたものと一致するものを見つけることができる?lua_replace@@YAXPAUlua_State@@H@Zため、関数は存在しますが、名前は一致しません。

私はこのレベルのリンカー管理にあまり詳しくないので、これは私の単純なエラーかもしれません。lpack ビルドの値が lua51.lib 入力ファイルの値と一致しないのはなぜですか?

アップデート

lua51.dll および lua51.lib ファイル内のすべてのエクスポートは__cdecl、私の lpack プロジェクトは に設定されてい__stdcallます。そのプロパティを変更すると (C/C++ -> Advanced -> Calling Convention の下)、コンパイルの問題が修正され、lpack.dll ファイルが作成されました。

ただし、lua からファイルをロードしようとするrequire('lpack')と失敗します。The specified procedure could not be found.

LoadLibraryA でライブラリをロードする lua C コードを中断すると、NULL と 0x7F の GetLastError() コードが返されます。

更新 2

ロードしようとしていた lpack.dll ファイルは、間違った出力ディレクトリが原因で古くなったため、LoadLibrary の失敗が修正されました。次に GetProcAddress が失敗しextern "C"ますが、Mud の推奨に従って lpack.c ファイルのエクスポート関数に追加すると、問題は解決しました。

4

1 に答える 1