1
我試圖做一些簡單的Lua 5.2使用下面的C嵌入++代碼:的Lua 5.2:使用luaL_dofile時未定義的符號()
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
。
正如我記得,'-ldl'也是必需的。鏈接器選項,沒什麼特別之處。 – Kamiccolo
@Kamiccolo我只是嘗試了'-llua'和'-ldl',但只是'-llua'和'-lm'對我很好。 – beakr
@beakr'-lm'用於'math.h'頭文件嗎?我被告知,如果我在我的.c文件中使用'math.h'函數,編譯時需要包含'-lm'。但是,編譯gcc時似乎並不需要包含它。那麼,它是特定於編譯器嗎? –