Visual Studio(2017)で、Lua5.3を使用してC ++プログラムをスクリプト化しようとしていますが、リンカーがC ++ソースファイルで参照されている3つの関数名を見つけられません。
未解決の外部シンボル_lua_close
未解決の外部シンボル_lua_createtable
未解決の外部シンボル_luaL_newstate
LuaのWebサイトからC ++ソースを取得しました。
インポートライブラリが付属していないLua5.3ダイナミックライブラリをダウンロードしたので、次のようなMSVCツールを使用してインポートライブラリを作成しました。
dumpbin /exports E:\Documents\Programmation\Lua5.3\lua53.dll
dumpbinの出力から、146個の名前を新しいファイル「mylua53lib.def」にコピーし、libを実行して次のように.libファイルを生成しました。
lib /def:E:\Documents\Programmation\Lua5.3\mylua53lib.def /OUT:E:\Documents\Programmation\Lua5.3\mylua53lib.lib /machine:x86
リンカが検出しない3つの関数名は、実際にはdumpbinコマンドの出力に表示されません。
Windowsでの動的リンクを目的としたLuaのバイナリ配布には、次の2つのバイナリファイルが付属している必要があります。
ライブラリファイルに.a
拡張子が付いている場合があります。これは、(.lib
Windowsではなく)Linuxでより一般的です。ただし、Windowsビルドの場合は、そのファイルをリンカーの依存関係として渡すだけで問題なく動作します。この質問は、2つの規則の違いを扱います。
ちなみに、これを機能させるために、VisualStudioでC ++プロジェクトを作成し、Source.cpp
デフォルトで提案されているようにを追加すると、未解決の外観が得られます。これは、CソースがC ++コードとして正常にコンパイルされる一方で、リンカーは使用されるC関数の定義に名前が壊れていることを予期するためです。これは、ファイルをCコードとしてコンパイルするか、できれば、次を使用してリンクライブラリでLuaヘッダーの名前をマングル解除するように指示することで防ぐことができますextern "C"
。
extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加