3

次のC++コードを単純に使用しようとしています

lua_State *state = luaL_newstate();

luaL_openlibs(state);

lua_getglobal(state, "_G");
lua_pushstring(state, "print");
lua_pushnumber(state, 4.5);
lua_call(state, 2, 1);

lua_close(state);

そして、リンカーエラーが発生しています。前述の関数呼び出しはすべてリンカー エラーを生成します。

1>main.obj : error LNK2001: unresolved external symbol _luaL_newstate
1>main.obj : error LNK2001: unresolved external symbol _lua_pushnumber
1>main.obj : error LNK2001: unresolved external symbol _lua_call
1>main.obj : error LNK2001: unresolved external symbol _lua_pushstring
1>main.obj : error LNK2001: unresolved external symbol _luaL_openlibs
1>main.obj : error LNK2001: unresolved external symbol _lua_getfield
1>main.obj : error LNK2001: unresolved external symbol _lua_close

ヘッダー インクルードは、次のコードで行われます。

extern "C" {
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
}

MinGW、mingw32-make BUILDMODE=static を使用して LuaJIT を「インストール」しました。「LuaJIT のビルドに成功しました」という素晴らしいメッセージが表示されました。

私はVS2012でコードをコンパイルしています。私はこのようにリンカを設定しました:

追加のライブラリ ディレクトリ: D:\Programming\LuaJIT Source\LuaJIT-2.0.1\src 追加のインクルード ディレクトリ: D:\Programming\LuaJIT Source\LuaJIT-2.0.1\src

私はwindows7マシンを使用しており、githubページから最新のLuaJITを使用しています。

4

2 に答える 2

1

一般に、アプリケーションと同じコンパイラを使用してすべてのライブラリをコンパイルする必要があります。MinGW は .a ライブラリ アーカイブを生成しますが、MSVC は通常 .lib アーカイブを出力します。

そのため、MSVC を使用して LuaJIT を再コンパイルし、luajit.lib が存在するパスをリンカー パスに追加し、アプリケーションにリンクされるライブラリのリストに luajit.lib を追加します。

于 2013-03-31T15:45:15.137 に答える
0

LuaJIT ライブラリへのパスを設定する必要があります。下の図を参照してください。 ここに画像の説明を入力

于 2013-03-31T15:40:55.697 に答える