我试图使用以下C ++代码进行一些简单的Lua 5.2嵌入:
void dnLuaRunner::Exec(string file)
{
// Initialize the lua interpreter.
lua_State * L;
L = luaL_newstate();
// Load lua libraries.
static const luaL_Reg luaLibs[] =
{
{"math", luaopen_math},
{"base", luaopen_base},
{NULL, NULL}
};
// Loop through all the functions in the array of library functions
// and load them into the interpreter instance.
const luaL_Reg * lib = luaLibs;
for (; lib->func != NULL; lib++)
{
lib->func(L);
lua_settop(L, 0);
}
// Run the file through the interpreter instance.
luaL_dofile(L, file.c_str());
// Free memory allocated by the interpreter instance.
lua_close(L);
}
第一部分是一些基本的初始化和用于加载一些标准库模块的代码,但是当我调用luaL_dofile(...)
时,它似乎为未定义的符号引发了一些错误。 luaL_dofile
是一个使用luaL_loadfile
和lua_pcall
等函数的宏,因此我收到以下链接器错误并不是非常可怕:
"_luaL_loadfilex", referenced from:
dnLuaRunner::Exec(std::string) in dnLuaRunner.cc.o
"_lua_pcallk", referenced from:
dnLuaRunner::Exec(std::string) in dnLuaRunner.cc.o
ld: symbol(s) not found for architecture x86_64
我正在Makefile中正确链接liblua.a
。
答案 0 :(得分:3)
原来你需要添加-lm
和-llua
,并且必须位于要编译的文件之后,如下所示:
# or clang++ works too
$ g++ ... foofy.c -llua -lm
我也看到了你最后必须使用-ldl
的情况。