lua和tolua++的安装
目前lua发布的最新版本是2011年12月12日发布的lua-5.2.0.tar.gz,而tolua++发布的最新版本为tolua++-1.0.93.tar.bz2,该版本暂时不支持lua5.2(其实简单修改下代码也可以支持的),所以我们以上一版本的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++的安装之旅即将结束,接下来就要学习一些基本的语法和用法啦。记住一点,要多练习才能真正的掌握它。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |