LUA编译错误,使用Visual 2010时出现“外部符号"struct lua_State * __cdecl luaL_newstate(void)”未定义”。

我正在使用 Visual Studio 2010 版本的 Lua 5.2.3,当我编译以下代码时:

#include "stdafx.h"
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#include <stdlib.h>
#include <stdio.h>

void main()
{
    lua_State *luaState = luaL_newstate();
}

我得到了错误信息:

error LNK2019: unresolved external symbol "struct lua_State * __cdecl luaL_newstate(void)" (?luaL_newstate@@YAPAUlua_State@@XZ) referenced in function _wmain

请给我一些建议。谢谢!

点赞
用户451007
用户451007

这是 C++ 中的 "name mangling" 的结果。注意这个术语中有奇怪的字符:

?luaL_newstate@@YAPAULua_State@@XZ

你有以下选择:

  1. 将此文件的扩展名从 .cpp 改为 .c,这样它将通过 C 编译器而非 C++ 编译器运行(注意:依赖于编译器)
  2. 在包含的代码周围添加 extern "C":
extern "C"
{
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
}
  1. 使用以下代码:
#include "lua.hpp"

在最后一种情况下,该头文件是使用 5.2 版本的。它会为你执行我在选项2中写的操作。

2014-04-12 12:13:18