无法在C++中使用Lua库。

好的,我已经尝试在 Linux/Ubuntu 上编译一个简单的 C++ Lua 程序;

首先,我安装了 Lua 库:我下载了 Lua 源码并按照下面的方式自行编译:

'sudo make linux install`///在`lua src`目录中

它起作用了:当我在命令行中调用lua时,它显示了版本,lua 5.3.1;然后,我编写了一个使用这个 Lua 库的简单的 C++ 程序:

#include <stdio.h>

extern "C" {
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
}

/* the Lua interpreter */
lua_State* L;

static int average(lua_State *L)
{
    /* get number of arguments */
    int n = lua_gettop(L);
    double sum = 0;
    int i;

    /* loop through each argument */
    for (i = 1; i <= n; i++)
    {
        /* total the arguments */
        sum += lua_tonumber(L, i);
    }

    /* push the average */
    lua_pushnumber(L, sum / n);

    /* push the sum */
    lua_pushnumber(L, sum);

    /* return the number of results */
    return 2;
}

int main ( int argc, char *argv[] )
{
    /* initialize Lua */
    L = luaL_newstate();

    /* load Lua base libraries */
    luaL_openlibs(L);

    /* register our function */
    lua_register(L, "average", average);

    /* run the script */
    luaL_dofile(L, "avg.lua");

    /* cleanup Lua */
    lua_close(L);

    /* pause */
    printf( "Press enter to exit..." );
    getchar();

    return 0;
}

但是当我这样编译它时: "g++ test.cpp -o output -llua"

我得到了以下错误:

loadlib.c:(.text + 0x502):未定义的参考 `dlsym'
loadlib.c:(.text + 0x549):未定义的参考 `dlerror'
loadlib.c:(.text + 0x576):未定义的参考 `dlopen'
loadlib.c:(.text + 0x5ed):未定义的参考 `dlerror'
//usr/local/lib/liblua.a(loadlib.o): 在 'gctm'中?:

我做错了什么?

点赞
用户107090
用户107090

正如 readme 中提到的,执行 make linux 命令会在 Lua 的 src 目录(或者顶级目录)生成三个文件:lua(解释器)、luac(编译器)以及 liblua.a(库文件)。

lua(解释器)是一个普通的 Lua 客户端,就像你的一样。 make linux 命令的构建行如下:

gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline

请注意 -ldl 的存在。另外请注意 -Wl,-E,它允许在 lua(解释器)加载动态 C 库时解析 Lua API 符号。如果您计划在程序中加载动态 C 库,则需要使用 -Wl,-E 重新构建它。

2015-06-29 10:55:00