使用 Lua "Undefined reference to"

"Undefined reference to" using Lua

本文关键字:to reference Undefined 使用 Lua      更新时间:2023-10-16

当我试图构建我的项目时,我得到了错误undefined reference to 'luaL_newstate'。我知道这是一个错误的链接器,但我是相对较新的Lua和添加一个库到一个项目。顺便说一下,我使用Code::Blocks。API函数luaL_openlibsluaL_loadfilelua_pcalllua_getfieldlua_typelua_settop也缺失。

我在一个网站上看到,为了解决这个问题,我必须将我的项目与libdl链接起来,但我真的不知道这是什么意思,也不知道怎么做。

我遇到了同样的问题,在我的情况下,我在这里找到了一个解决方案。基本上包括将lua的#include s包装在extern "C"中,如:

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

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

我面前没有Code:: block,所以我不能告诉你你需要添加什么选项。它应该是一个"命令行选项"或"编译器选项"的列表。如果从命令行编译,完整的命令如下所示:

gcc -o sample sample.c -llua -ldl

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

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

正如公认的答案所提到的,这些标头缺少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"
}
相关文章: