当我尝试构建项目时,我收到错误undefined reference to 'luaL_newstate'
。我知道这是链接器的一个错误,但我对Lua相对较新,并为项目添加了一个库。我顺便使用Code :: Blocks。 API函数luaL_openlibs
,luaL_loadfile
,lua_pcall
,lua_getfield
,lua_type
,lua_settop
也不见了。
我在网站上看到我必须将我的项目与libdl链接才能解决这个问题,但我真的不知道它是什么意思以及如何去做。
答案 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)
我面前没有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"
}