12

undefined reference to 'luaL_newstate'当我尝试构建我的项目时出现错误。我知道这是链接器的错误,但我对 Lua 和向项目添加库还比较陌生。顺便说一句,我使用 Code::Blocks。API 函数luaL_openlibs, luaL_loadfile, lua_pcall, lua_getfield, lua_type,lua_settop 也丢失了。

我在一个网站上看到我必须将我的项目与 libdl 链接才能解决这个问题,但我真的不知道它是什么意思以及如何去做。

4

3 回答 3

22

我遇到了同样的问题,就我而言,我在这里找到了适合我的解决方案。基本上包括将lua的#include包装在extern "C"中,例如:

extern "C"{
    #include <lua5.2/lualib.h>
    #include <lua5.2/lauxlib.h>
    #include <lua5.2/lua.h>
}
于 2014-01-15T08:22:14.007 回答
3

当您第一次尝试编译 Lua 时,它可能会有点复杂。您引用的网站是正确的:链接 Lua 时几乎需要 libdl。

我面前没有 Code::Blocks,所以我无法真正告诉您需要添加哪些选项。它应该是“命令行选项”或“编译器选项”的列表。如果您从命令行编译,完整的命令将如下所示:

gcc -o sample sample.c -llua -ldl

请注意 -l 选项在库名称之前没有空格。Code::Blocks 中应该有一个选项来添加您自己的编译时选项或编译器标志。您可以将“-llua”和“-ldl”添加到该选项列表中。或者,只需从命令行自行完成。

libdl 是在将其他库动态链接到您的程序时使用的库。您必须添加它才能正确链接 Lua。

于 2012-12-30T20:19:47.150 回答
0

正如公认的答案所提到的,这些标头缺少extern "C". 另一种方法是包含已安装的lua.hpp,它已经用于extern "C"包装这些 Lua 头文件。

// lua.hpp
// Lua header files for C++
// <<extern "C">> not supplied automatically because Lua also compiles as C++

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
于 2020-05-14T07:19:49.763 回答