"Undefined reference to"使用Lua。

当我尝试构建我的项目时,出现了“undefined reference to 'luaL_newstate'”的错误。我知道这是一个与链接器有关的错误,但我对Lua和向项目添加库是相对新的。顺便说一下,我使用Code::Blocks。API函数luaL_openlibsluaL_loadfilelua_pcalllua_getfieldlua_typelua_settop也都不见了。

我在一个网站上看到,我必须将我的项目链接到libdl才能解决这个问题,但我不太明白它的意思以及如何做到。

点赞
用户631634
用户631634

Lua 在首次尝试进行编译时可能会有些复杂。你引用的网站是正确的:链接 Lua 时,libdl 几乎是必须的。

我手头没有 Code::Blocks,所以我不能告诉你需要添加哪些选项。它应该是一个“命令行选项”或“编译器选项”的列表。如果你是从命令行编译的话,完整的命令将如下所示:

gcc -o sample sample.c -llua -ldl

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

libdl 是一个库,用于在程序中动态链接其他库。您必须添加它才能正确链接 Lua。

2012-12-30 20:19:47
用户1263584
用户1263584

我面临着相同的问题,在我的情况下,我在这里找到了适合我的解决方案:[http://www.linuxquestions.org/questions/programming-9/undefined-reference-error-when-using-lua-api-892782/]。基本上就是将lua的**#include**包装在一个**extern "C"**里面,如下:

extern "C"{
    #include <lua5.2/lualib.h>
    #include <lua5.2/lauxlib.h>
    #include <lua5.2/lua.h>
}
2014-01-15 08:22:14
用户5384363
用户5384363

正如被接受的答案所提到的,这些头文件缺乏 extern "C"。另一个选择是包含已安装的 _lua.hpp_,它已经使用 extern "C" 来封装这些 Lua 头文件。

// lua.hpp
// 用于 C++ 的 Lua 头文件
// <<extern "C">> 不是自动提供的,因为 Lua 也可以编译为 C++

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
2020-05-14 07:19:49