1 安装lua for linux.源码下载后直接make make install 我安装在了默认目录(/user/local),安装时选择默认平台会在安装目录include下生成lua.h lua.hpp lualib.h lauxlib.h 在lib文件夹下生成liblua.a
2 安装tolua++ ,下载源码后没用工程打开src下面有bin和lib两个文件夹,参照install文件描述,直接建立两个工程先生成lib 再生成可执行程序tolua,tolua依赖于第一个工程生成的库文件和安装lua生成的库文件liblua.a编译中可能由于未配置依赖libdl.so而报错。
3 编写测试工程,编写pkg文件用tolua命令生成头文件和可执行文件
./tolua -o luafun.cpp -H luafun.h luafun.pkg
Luafun.pkg
$#include"Fun.h"
struct param;
class girl
{
public:
girl();
~girl();
void talk();
};
把生成的头文件和cpp文件都加入到工程中同时需要添加的头文件为
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include"tolua++.h"
}
项目依赖于lua库文件和tolua生成的库文件
Lua脚本
local g = girl:new()
g:talk()
g:delete()
function boy ( g)
g:talk();
end
调用示例:
lua_State* L = lua_open();
luaopen_base(L);
tolua_luafun_open(L);
luaL_dofile(L,"test.lua");//
int iTop = lua_gettop(L);
lua_pop(L, iTop); // 清栈
lua_getglobal(L,"boy");
girl g;
tolua_pushusertype(L,&g,"girl");
lua_call(L,1,0);
lua_close(L);
cout << "Hello world!" << endl;
return 0;
传递类指明类型用 tolua_pushusertype