3

这是我发现自己无法深入使用正常的谷歌搜索/堆栈溢出/youtube 例程的第一个问题。

我正在尝试在 C++ 环境中编译一个最小的 Lua 程序,以确保我的环境已准备好进行开发。Lua 语言稍后将用于我的 C++ 游戏的用户界面编程。

首先是关于我的环境的一些基本信息:

Windows 7 64 位

视觉工作室 2010

Lua for Windows 5.1(我可以从谷歌代码下载的最新版本)

这是我要编译的代码:

// UserInt.cpp : Defines the entry point for the console application.
//
#pragma comment(lib,"lua5.1.dll")
#include "stdafx.h"
#ifndef __LUA_INC_H__
#define __LUA_INC_H__

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



int _tmain(int argc, _TCHAR* argv[])
{
    lua_State * ls = luaL_newstate();
    return 0;
}

#endif // __LUA_INC_H__

这是我得到的错误:

1>UserInt.obj : error LNK2019: unresolved external symbol _luaL_newstate referenced in function _wmain 1>c:\users\deank\documents\visual studio 2010\Projects\UserInt\Debug\UserInt.exe : fatal error LNK1120: 1 unresolved externals

我尝试过的事情:

我已经阅读了关于不再使用 lua_open()(和其他几个函数)的信息,所以我尝试了 newstate 函数。我犯了同样的错误。这更像是一次理智检查。我使用的是 5.1 而不是 5.2,所以我认为这并不重要。

我还阅读了此线程无法链接最小的 Lua 程序,但它似乎对我没有帮助,因为我运行的环境与该 OP 不同。我在一个简单的 Windows 7 和 Visual Studio 环境中。

最上面的 pragma 注释行是我在另一个线程中看到的。无论有没有它,我都会遇到同样的错误。

我进入了我的 Visual Studio C++ 目录区域,并将 lua 包含添加到了包含中,并将 lua 库添加到了库中。

所以看起来我的程序正在看到 .h 并看到符号。但由于某种原因,它没有获得函数的 .cpp 实现。这就是为什么我希望直接包含该 .dll 有助于解决问题,但事实并非如此。

所以,我觉得我已经用尽了我自己解决这个问题的所有选择。我希望有人能够帮助我在这里前进。Lua 看起来像是一种很棒的脚本语言,我想让我的环境适应开发。

我希望这只是我的一些愚蠢的错误。我相信我已经提供了尽可能多的信息。如果您需要更多详细信息,我会在可以提供的情况下更新信息。

编辑1

尝试了这个Can't build lua a project with lua in VS2010 中的解决方案,怀疑是库问题

那也没有用。

4

1 回答 1

9

您需要拥有库 (.LIB) 文件并将其添加到 VS。使用 Project > Properties 并转到 Linker > Input 并将完整的 .lib 文件名添加到“Additional Dependencies”行。请注意,.LIB 与 .DLL 不同。

就个人而言,我更喜欢将源代码添加到我的项目中,而不是引用动态链接库。以下过程将让您这样做。

  1. 下载源代码(http://www.lua.org/ftp/),解压。

  2. 在 Visual Studio 中,选择文件 > 新建 > 项目,然后选择 Visual C++、Win32、“Win32 控制台应用程序”。

  3. 在 Visual Studio 的项目中,添加除 luac.c 之外的所有源代码。还要从 VS 为您创建的文件中删除 main() 函数。这通常以您指定的项目名称命名,文件扩展名为 .cpp。您可以从项目中完全删除此文件。

  4. 构建并运行。

这是 Lua 控制台

于 2012-08-06T21:08:14.673 回答