tolua++是一种第三方的软件包,可以为Lua提供面向对象的特性,这样我们就可以使用Lua来编写使用C++语言库的脚本文件.
二.tolua++的编译.
tolua++的主页在http://www.codenix.com/~tolua/,目前的最新版本是1.0.7,为了使用tolua++,我们需要三个文件:
1.bin/tolua++[.exe] - tolua++的可执行程序
2.include/tolua++.h - tolua++的头文件
3.lib/libtolua++.a or lib/tolua++.lib - tolua++的静态库(当然有的时候也需要生成动态库,可以参考我下面给出的文章的网址,我们先从最简单的入手)
使用tolua++的时候,都需要使用tolua++的可执行程序自动生成一个.pkg文件生成对应的.c(C语言)或者.cpp文件(C++语言),然后把这个文件和对应的C/C++文件一起编译生成可执行程序,这样就可以对对应的Lua脚本进行读取操作.在后面将结合代码例子对这个过程进行详细的讲解.
说明一下,这个办法不是我想出来的,出处在这里:
http://lua-users.org/wiki/CompilingToluappWithoutScons
官方下载的tolua++文件夹里面已经有了上面提到的1和2文件了,我在这里偷懒,就只说3的生成.
其实在上面的文档里面写得很清楚了,如下编译生成静态库文件:
0 _fcksavedurl=">tolua++_1.0.5-1/src/lib> ar rcsv libtolua++.a *.o
<path_to_lua>的意思是这里输入的是lua源代码包的路径,gcc中的-I参数用于指定include文件的位置.
生成了这三个文件之后,如果需要使用它们的话,需要把它们拷贝到相应的路径.windows下面一般的会使用cygwin这个工具,以它为例说明:
1.可执行文件放在cygwin根目录的bin目录下
2.头文件放在cygwin根目录下的usr/include下面
3.静态头文件放在cygwin根目录下的lib目录下面
说明:如果没有Lua语言的对应的可执行文件,头文件,lib文件一样不能使用tolua++,对于配置lua脚本解释器的过程和上面类似.
OK,这样一个tolua++的编译环境就配制好了,如果你在原先安装cygwin的时候没有指定cygwin的可执行文件的目录,那么对于windows下面的用户可以在"我的电脑"-"属性"-"高级"-"环境变量"-"Path"里面修改,
比如我在里面加入我的cygwin的bin目录:C:/cygwin/bin,大功告成~~windows下面的用户只用gcc的话不一定非得使用cygwin,毕竟太大了,有人喜欢使用mingw,配置的方法类似~~
三.代码例子
tolua++的源码包下载下来之后在根目录的src/tests中有很多代码例子,我们随便找其中的tarray一组作为讲解的对象.
这一组中包含的有对应的pkg文件,c文件,h文件和最后用于测试的lua脚本文件.pkg文件是用于声明我们允许后来使用的Lua脚本使用的变量,常量,类,函数等等的一个声明列表,这个列表中的所有东西都必须在对应的C++文件中给出来,不然是无法使用的.pkg文件的语法和C/C++的语法比较类似,可以到tolua++的官方网站上去看看,这里不再详述.
使用pkg文件我们可以生成一个对应的C或者C++文件,可以这样做:
生成的test.c就是对应的c文件,你打开这个文件看看,基本上都需要上千行的代码.
1.包含lua头文件:
0 _fcksavedurl=">#include "lauxlib.h"
0 _fcksavedurl=">
2.调用Lua脚本:
省略去不重要的部分,有这些代码:
0 _fcksavedurl="> lua_State* L = lua_open();
0 _fcksavedurl="> //0 _fcksavedurl=">.
0 _fcksavedurl="> luaopen_base(L);
0 _fcksavedurl="> tolua_tarray_open(L);
0 _fcksavedurl="> lua_dofile(L,"tarray.lua");//执行lua脚本
0 _fcksavedurl="> lua_close(L);
首先,生成tarray.o文件:
0 _fcksavedurl=">
其次,生成test.o文件:
0 _fcksavedurl="> print(a[i - 1])
0 _fcksavedurl=">end
0 _fcksavedurl=">
0 _fcksavedurl=">for i=2,10 do
0 _fcksavedurl="> print(p[i - 1].x)
0 _fcksavedurl=">end
0 _fcksavedurl=">
0 _fcksavedurl=">
0 _fcksavedurl=">2
0 _fcksavedurl=">3
0 _fcksavedurl=">4
0 _fcksavedurl=">5
0 _fcksavedurl=">6
0 _fcksavedurl=">7
0 _fcksavedurl=">8
0 _fcksavedurl=">9
0 _fcksavedurl=">10
0 _fcksavedurl=">1
0 _fcksavedurl=">2
0 _fcksavedurl=">3
0 _fcksavedurl=">4
0 _fcksavedurl=">5
0 _fcksavedurl=">6
0 _fcksavedurl=">7
0 _fcksavedurl=">8
0 _fcksavedurl=">9
0 _fcksavedurl=">
1)编写pkg文件生成对应的c/c++文件
2)分别编译1)产生的文件(注意要加上对应的头文件)和需要使用lua脚本的文件
3)编写lua脚本,遵从lua的语法并且使用到的变量,函数,类等都是1)中声明过的.