不能在C ++中使用lua库

时间:2015-06-29 09:14:25

标签: c++ lua

好的,所以我尝试在linux / Ubuntu上编译一个简单的C ++ lua程序; Firt,我安装了lua libs:我下载了lua源代码并自行编译,如下:

`sudo make linux install` /// in the `lua src` directory

它有效:当我在命令lin中调用lua时,它显示了版本,lua 5.3.1;然后,我使用这个lua lib编写了一个简单的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): undefined reference to `dlsym'
loadlib.c:(.text+0x549): undefined reference to `dlerror'
loadlib.c:(.text+0x576): undefined reference to `dlopen'
loadlib.c:(.text+0x5ed): undefined reference to `dlerror'
//usr/local/lib/liblua.a(loadlib.o): In function `gctm':

我做错了什么?

1 个答案:

答案 0 :(得分:1)

readme中所述,Lua main | 1 | SomeName2 | some english 2 | 目录(或顶级目录)中的make linux生成三个文件: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(解释器)加载动态C库时解析Lua API符号。如果您计划在程序中加载动态C库,请使用lua重建它。