“使用Lua的未定义引用”

时间:2012-12-27 19:17:27

标签: c++ reference lua

当我尝试构建项目时,我收到错误undefined reference to 'luaL_newstate'。我知道这是链接器的一个错误,但我对Lua相对较新,并为项目添加了一个库。我顺便使用Code :: Blocks。 API函数luaL_openlibsluaL_loadfilelua_pcalllua_getfieldlua_typelua_settop也不见了。

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

3 个答案:

答案 0 :(得分:14)

我遇到了同样的问题,在我的案例中,我发现了一个适合我的解决方案here。基本上包括将 #include 的lua包含在 extern“C”中,例如:

extern "C"{
    #include <lua5.2/lualib.h>
    #include <lua5.2/lauxlib.h>
    #include <lua5.2/lua.h>
}

答案 1 :(得分:0)

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

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

gcc -o sample sample.c -llua -ldl

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

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

答案 2 :(得分: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"
}