好的,所以我尝试在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':
我做错了什么?
答案 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
重建它。