加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua和tolua++的安装

发布时间:2020-12-14 22:14:50 所属栏目:大数据 来源:网络整理
导读:来自:http://www.cnblogs.com/osyun/archive/2012/01/12/2320698.html 目前lua发布的最新版本是2011年12月12日发布的lua-5.2.0.tar.gz,而tolua++发布的最新版本为tolua++-1.0.93.tar.bz2,该版本暂时不支持lua5.2(其实简单修改下代码也可以支持的,修改方

来自:http://www.cnblogs.com/osyun/archive/2012/01/12/2320698.html

目前lua发布的最新版本是2011年12月12日发布的lua-5.2.0.tar.gz,而tolua++发布的最新版本为tolua++-1.0.93.tar.bz2,该版本暂时不支持lua5.2(其实简单修改下代码也可以支持的,修改方法参考http://lua-users.org/lists/lua-l/2013-01/msg00352.html),所以我们以上一版本的lua-5.1.4.tar.gz为例,讲解tolua++的安装方式。安装环境为RHEL5.5。

一、下载相关软件包

lua包:http://www.lua.org/ftp/lua-5.1.4.tar.gz

tolua++包:http://www.codenix.com/~tolua/tolua++-1.0.93.tar.bz2

scons包:http://www.scons.org/ 下载Development (2.1.0)->RPM,该安装包依赖python,如未安装,请先安装python。

二、 安装过程

1、? 安装lua

解压

/usr/local#tar zxvf lua-5.1.4.tar.gz

/usr/local#cd lua-5.1.4/

编译

/usr/local/lua-5.1.4#make linux

安装

/usr/local/lua-5.1.4#make install

2、? 安装scons

/usr/local#rpm -ivh scons-2.1.0-1.noarch.rpm

3、? 安装tolua++

解压(修改文件名,把空格去掉)

/usr/local#tar jxvf tolua-1.0.93.tar.bz2

/usr/local#cd tolua++-1.0.93/

修改配置

/usr/local/tolua++-1.0.93#vim config_linux.py

找到LIBS = ['lua50','lualib50','dl','m']

改为LIBS = ['lua','m']

编译

/usr/local/tolua++-1.0.93#scons all

安装

/usr/local/tolua++-1.0.93#scons install

4、? 查看

/usr/local#cd bin

/usr/local/bin#ls

lua? luac? tolua++

?

/usr/local#cd lib

/usr/local/lib#ls

liblua.a? libtolua++.a

解释:之所以修改tolua++的配置文件,是因为lua编译过程中生成的是一个静态库liblua.a,所以我们需要修改连接的库文件,最终我们生成的是libtolua++.a这个静态库文件。与之前的版本不同,只有两个库文件。

三、 旁门左道

项目当中一般会用到lua和tolua++这两个库文件,而且这两个的可执行文件也需要。索性就把lua和tolua++的代码编成一个动态库,然后再把两个可执行文件编译出来,这样似乎更能够贴近我们的项目,如果想要扩展动态库,只需要继续添加我们新的文件,修改makefile即可。

1、? 新建文件夹

新建tolua文件夹

在tolua文件夹下新建src、include、bin、lib四个文件夹

在tolua/src下新建lua、tolua两个文件夹

2、? 拷贝文件

将lua-5.1.4/src/lua.c拷贝到tolua/src/lua

将lua-5.1.4/src下除lua.c外的*.c文件拷贝到tolua/src

将lua-5.1.4/src/*.h拷贝到tolua/include

将lua-5.1.4/ etc/ lua.hpp拷贝到tolua/include

将tolua++-1.0.93/src/lib/*.c拷贝到tolua/src/

将tolua++-1.0.93/src/lib/*.h拷贝到tolua/include

将tolua++-1.0.93/src/bin/ toluabind.h拷贝到tolua/include

将tolua++-1.0.93/src/bin/tolua.c和toluabind.c拷贝到tolua/src/tolua

目录结构如下:

|-- bin

|-- include

|?? |-- lapi.h

|?? |-- lauxlib.h

|?? |-- lcode.h

|?? |-- ldebug.h

|?? |-- ldo.h

|?? |-- lfunc.h

|?? |-- lgc.h

|?? |-- llex.h

|?? |-- llimits.h

|?? |-- lmem.h

|?? |-- lobject.h

|?? |-- lopcodes.h

|?? |-- lparser.h

|?? |-- lstate.h

|?? |-- lstring.h

|?? |-- ltable.h

|?? |-- ltm.h

|?? |-- lua.h

|?? |-- lua.hpp

|?? |-- luaconf.h

|?? |-- lualib.h

|?? |-- lundump.h

|?? |-- lvm.h

|?? |-- lzio.h

|?? |-- tolua++.h

|?? |-- tolua_event.h

|?? `-- toluabind.h

|-- lib

`-- src

??? |-- lapi.c

??? |-- lauxlib.c

??? |-- lbaselib.c

??? |-- lcode.c

??? |-- ldblib.c

??? |-- ldebug.c

??? |-- ldo.c

??? |-- ldump.c

??? |-- lfunc.c

??? |-- lgc.c

??? |-- linit.c

??? |-- liolib.c

? ??|-- llex.c

??? |-- lmathlib.c

??? |-- lmem.c

??? |-- loadlib.c

??? |-- lobject.c

??? |-- lopcodes.c

??? |-- loslib.c

??? |-- lparser.c

??? |-- lstate.c

??? |-- lstring.c

??? |-- lstrlib.c

??? |-- ltable.c

??? |-- ltablib.c

??? |-- ltm.c

??? |-- lua

??? |?? `-- lua.c

??? |-- luac.c

??? |-- lundump.c

??? |-- lvm.c

??? |-- lzio.c

??? |-- print.c

??? |-- tolua

??? |?? |-- tolua.c

??? |?? `-- toluabind.c

??? |-- tolua_event.c

??? |-- tolua_is.c

??? |-- tolua_map.c

??? |-- tolua_push.c

? ? `-- tolua_to.c

3、? 建立makefile

索性直接拷贝吧,下边是我写好的

CFLAGES = -O2 -I./include

LDFLAGES = -L./lib -ltolua++

CC = gcc

OBJSDIR = src

LIB = lib

BIN = bin

OBJS = $(OBJSDIR)/luac.o

?????? $(OBJSDIR)/tolua_event.o

?????? $(OBJSDIR)/tolua_push.o

?????? $(OBJSDIR)/print.o

?????? $(OBJSDIR)/lzio.o

?????? $(OBJSDIR)/ltm.o

?????? $(OBJSDIR)/lstring.o

?????? $(OBJSDIR)/lopcodes.o

?????? $(OBJSDIR)/lobject.o

?????? $(OBJSDIR)/lmem.o

?????? $(OBJSDIR)/lmathlib.o

?????? $(OBJSDIR)/llex.o

?????? $(OBJSDIR)/linit.o

?????? $(OBJSDIR)/lgc.o

?????? $(OBJSDIR)/ldump.o

?????? $(OBJSDIR)/lfunc.o

?????? $(OBJSDIR)/lvm.o

?????? $(OBJSDIR)/ltable.o

?????? $(OBJSDIR)/lparser.o

?????? $(OBJSDIR)/lcode.o

?????? $(OBJSDIR)/lstate.o

?????? $(OBJSDIR)/loslib.o

? ?????$(OBJSDIR)/liolib.o

?????? $(OBJSDIR)/ldo.o

?????? $(OBJSDIR)/ldblib.o

?????? $(OBJSDIR)/lauxlib.o

?????? $(OBJSDIR)/lbaselib.o

?????? $(OBJSDIR)/ltablib.o

?????? $(OBJSDIR)/lundump.o

?????? $(OBJSDIR)/tolua_is.o

?????? $(OBJSDIR)/ldebug.o

?????? $(OBJSDIR)/lapi.o

?????? $(OBJSDIR)/lstrlib.o

?????? $(OBJSDIR)/loadlib.o

?????? $(OBJSDIR)/tolua_to.o

?????? $(OBJSDIR)/tolua_map.o

LUA_O = $(OBJSDIR)/lua/lua.c

TOLUA_O = $(OBJSDIR)/tolua/tolua.c

????????? $(OBJSDIR)/tolua/toluabind.c

?

TARGET = libtolua++.so

$(TARGET):$(OBJS)

$(CC) -shared -o $(LIB)/$@ $^ -lm $(CFLAGES)

$(OBJS):%.o:%.c

$(CC) $? -c -fPIC -o $@ $(CFLAGES)

?

lua:

$(CC) -o $(BIN)/$@ $(LUA_O) $(CFLAGES) $(LDFLAGES)

?

tolua++:

$(CC) -o $(BIN)/$@ $(TOLUA_O) $(CFLAGES) $(LDFLAGES)

?

install:

mkdir -p /usr/local/bin /usr/local/include

cd bin && install -p -m 0755 lua tolua++ /usr/local/bin

cd include && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h lua.hpp tolua++.h /usr/local/include

cd lib && install -p -m 0644 libtolua++.so /lib

ldconfig

?

uninstall:

cd /usr/local/bin && $(RM) lua tolua++

cd /usr/local/include && $(RM) lua.h luaconf.h lualib.h lauxlib.h lua.hpp tolua++.h

cd /lib && $(RM) libtolua++.so

clean:

$(RM) $(LIB)/$(TARGET) $(OBJS) $(BIN)/*

4、? 修改代码

别急着编译,代码有问题

tolua_is.c?? ?119行

修改static? int lua_isusertable (lua_State* L,int lo,const const char* type)

为static? int lua_isusertable (lua_State* L,const char* type)

tolua_map.c? 398行

修改if (tolua_newmetatable(L,ctype) && tolua_newmetatable(L,type))

为if (tolua_newmetatable(L,(char*)type))

5、? 编译、安装、卸载

编译tolua++.so

make

编译lua可执行文件

make lua

编译tolua++可执行文件

make tolua++

安装

make install

卸载

make uninstall

四、 验证

1、 测试lua

lua的helloworld

直接在命令行运行lua,输入print 'hello world'

/usr/local#lua

Lua 5.1.4? Copyright (C) 1994-2008 Lua.org,PUC-Rio

> print 'hello world'

hello world

2、? 测试tolua++

直接命令行输入tolua++,会打印help信息

/usr/local#tolua++

常用命令如下:

-o? 设置输出文件,即.c或.cpp文件

-n? 设置包的名称,默认是输入文件的根名称

?

举例:

以tolua++-1.0.93/src/tests/tclass.*为例

/home/tolua/tclass#rm tclass.cpp

/home/tolua/tclass#tolua++ -n tclass -o tclass.cpp tclass.pkg

新建main.cpp加入测试代码:

/home/tolua/tclass#vi main.cpp

#include "lua.hpp"

#include "tolua++.h"

#include "tclass.h"

?

int tolua_tclass_open (lua_State* tolua_S);

?

int main ()

{

??????? Test::Tst_B* b = new Test::Tst_B;????? ???// instance used in Lua code

??????? lua_State* L = lua_open();

??????? luaL_openlibs(L);

??????? tolua_tclass_open(L);

???? ???luaL_dofile(L,"tclass.lua");

??????? lua_close(L);

??????? delete b;

??????? return 0;

}

编译:

/home/tolua/tclass#g++ -o test main.cpp tclass.cpp -ltolua++

运行:

/home/tolua/tclass#./test

结果:

deleting C: 6

deleting C: 7

deleting C: 8

deleting C: 9

e is type Test::Tst_B

ae is type nil

hello world

method!

static!

***** cast

type is userdata

bcast is userdata: 0x3dbe688

type is Test::Tst_B

B

table: 0x3dbd1c0

table: 0x3dc3180

table: 0x3dbd1c0

function: 0x3dc3640

function: 0x3dbfb50

userdata: 0x3dc8948

Test::Tst_B

this is 0x3dbe5b0,ptr is 0x3dbe5b0

this is 0x3dbe5b0,ptr is 0x3dbe5b0

1

2

3

deleting C: 10

Class test OK

?????? 到此,我们的tolua++的安装之旅即将结束,接下来就要学习一些基本的语法和用法啦。记住一点,要多练习才能真正的掌握它。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读