【问题标题】:How to link LuaJIT with a C++ program?如何将 LuaJIT 与 C++ 程序链接?
【发布时间】:2013-03-31 15:37:02
【问题描述】:

我正在尝试简单地使用以下 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“安装”了 LuaJIT,mingw32-make BUILDMODE=static。它给了我一个很好的“成功构建 LuaJIT”。

我正在用 VS2012 编译代码。我已经像这样设置了链接器:

其他库目录:D:\Programming\LuaJIT Source\LuaJIT-2.0.1\src 附加包含目录:D:\Programming\LuaJIT Source\LuaJIT-2.0.1\src

我在一台 windows7 机器上,我正在使用他们 github 页面上最新的 LuaJIT。

【问题讨论】:

    标签: c++ linker luajit


    【解决方案1】:

    一般来说,您应该使用与您的应用程序相同的编译器来编译所有库。 MinGW 生成一个 .a 库存档,而 MSVC 通常输出一个 .lib 存档。

    所以:使用 MSVC 重新编译 LuaJIT,将 luajit.lib 所在的路径添加到链接器路径,并将 luajit.lib 添加到要链接到应用程序的库列表中。

    【讨论】:

    • 谢谢你,这有效,我必须添加这个:#pragma comment(lib, "lua51.lib")
    • 嗨。正如安装说明中所说,我尝试使用 msvc 编译 luajit。但我总是失败。我只是无法从 .net 命令提示符启动 msvcbuild 命令。有谁知道我做错了什么?
    【解决方案2】:

    你应该设置 LuaJIT 库的路径,见下图

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2011-04-23
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多