Lua 5.3未定义的引用

时间:2015-05-06 18:22:32

标签: c++ lua

我正在尝试学习如何在一个C程序中嵌入lua,但我不擅长阅读技术文档,而且我还没有找到任何当前的教程。这是我的计划:

#include <iostream>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>


void report_errors(lua_State*, int);

int main(int argc, char** argv) {
    for (int n = 1; n < argc; ++n) {
        const char* file = argv[n];
        lua_State *L = luaL_newstate();

        luaL_openlibs(L);

        std::cerr << "-- Loading File: " << file << std::endl;

        int s = luaL_loadfile(L, file);

        if (s == 0) {
            s = lua_pcall(L, 0, LUA_MULTRET, 0);
        }

        report_errors(L, s);
        lua_close(L);
        std::cerr << std::endl;
    }
    return 0;
}

void report_errors(lua_State *L, int status) {
    if (status) {
        std::cerr << "-- " << lua_tostring(L, -1) << std::endl;
        lua_pop(L, 1);
    }
}

编译器为luaL_newstate,luaL_openlibs,luaL_loadfilex,lua_pcallk和lua_close提供了未定义的引用错误。我使用Code :: Blocks一台Windows计算机,我已将lua include目录添加到所有搜索路径,并将liblua53.a添加到链接库。 IDE自动完成了头名称,解析器显示了大部分lua函数,但通过简短的搜索,我发现解析器找不到lua_newstate或luaL_newstate。为什么会找到一些功能而不是其他功能呢?

2 个答案:

答案 0 :(得分:4)

在c ++中,您应该包含lua.hpp而不是lua.hlua.h没有定义extern "C"块来阻止c ++编译器的名称重命名。

答案 1 :(得分:0)

g ++的参数在输入文件之前有-llua。我把-llua放在最后,现在一切正常。