Unity的lua项目为Tolua# 编译protobuf
2016-10-09 19:05
3295 查看
记录以备忘
因为有别的现有架构,所以只是换lua中间件,同时需要protobuf,所以使用pbc加入编译。tolua#在github上就有simpleframwork可用,个人项目可以使用。
下载tolua# 的runtime项目 https://github.com/topameng/tolua.git到D:/tolua#
下载luapbc 项目https://github.com/cloudwu/pbc.git到D:/tolua#/pbc 此时tolua#项目结构为
修改编译脚本
这是修改好的win32平台编译脚本,修改了几个内容如下:
....
# 新加,编译pbc.a
# build protobuf fengyun ban pbc from https://github.com/cloudwu/pbc/ cd pbc
mingw32-make lib BUILDMODE=static CC="gcc -m32 -O3"
cp build/libpbc.a ../window/x86/libpbc.a
mingw32-make clean
cd ..
gcc -m32 -O3 -std=gnu99 -shared \
...
pbc/binding/lua/pbc-lua.c \ # 新加,要编译c代码,另一个是lua-53没用到
-o Plugins/x86/tolua.dll \
...
-Ipbc \ # 新加, 头文件目录
-Ipbc/src \# 新加,头文件目录
...
-Wl,--whole-archive window/x86/libluajit.a window/x86/libpbc.a -Wl,--no-whole-archive -static-libgcc
把生成的libpbc.a包含到dll中。
4.修改代码文件
pbc/binding/lua/pbc-lua.c 这个文件需要改一下
把 20行
#ifndef _MSC_VER
改成
#if !defined( _MSC_VER ) && !defined( __MINGW32__ ) && !defined( __MINGW64__)
因为我用的mingw + msys编译的,mingw没有_MSC_VER 这个定义,所以只好加mingw自己的
5.编译,运行mingw的msys.bat,在弹出的shell窗口cd到tolua#目录,运行./build_win32.sh生成tolua.dll在plugins/x86/目录下,拷贝到项目plugins/x86就好了。
6.使用
复制生成的dll文件到使用tolua#的unity项目plugins/x84或x86_64下,
修改luadll.cs,添加c接口,在适当的位置如下写
/*
** third party library
*/
[DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
public static extern int luaopen_protobuf_c(IntPtr L);
3.启动lua时注册proto库,
luaState.OpenLibs(LuaDLL.luaopen_pb);
luaState.OpenLibs(LuaDLL.luaopen_struct);
luaState.OpenLibs(LuaDLL.luaopen_lpeg);
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
luaState.OpenLibs(LuaDLL.luaopen_bit);
//lua.OpenLibs(LuaDLL.luaopen_bit);
#endif
//luaState.OpenLibs(LuaDLL.luaopen_sproto_core);
luaState.OpenLibs(LuaDLL.luaopen_protobuf_c);
就和lua注册别的第三方库一样,找到然后把proto的注册调用加上,就可以写lua代码了,参考pbc自带的demo
注:
tolua#项目地址https://github.com/topameng/tolua
如果没装mingwin的话可以下载tdm-gcc,在SourceForge搜tdm mingw就有http://jaist.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%20Installer/tdm64-gcc-5.1.0-2.exe
安装64位版的,因为也要编译64位dll。
安装方法:
1,运行安装文件,目录选择d:/mingw(自定义)
2,mingw安装到d:/mingw.配置bin目录到path环境变量。
3,下载msys,解压或安装(可以是执行文件和压缩包文件)到d:msys(自定义)https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/
4,修改msys目录下msys.bat,在第一行之前加入call "D:\Development\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"(vs2015的环境变量脚本,根据安装的vs来写,或者不加)
5,修改关联文件,d:msys/etc/fstab文件,可安装fstab.sample修改,即关联mingw所在安装目录,大致内容为:
#Win32_Path Mount_Point
D:/MinGW /mingw
6,基本完成了,执行msys.bat在弹出的shell窗口可以导航到tolua#进行编译了。
因为有别的现有架构,所以只是换lua中间件,同时需要protobuf,所以使用pbc加入编译。tolua#在github上就有simpleframwork可用,个人项目可以使用。
下载tolua# 的runtime项目 https://github.com/topameng/tolua.git到D:/tolua#
下载luapbc 项目https://github.com/cloudwu/pbc.git到D:/tolua#/pbc 此时tolua#项目结构为
修改编译脚本
#!/bin/bash # 32 Bit Version mkdir -p window/x86 # mingw32-make = 'C:\Ruby\DevKit\mingw\bin\mingw32-make.exe' cd luajit mingw32-make clean mingw32-make BUILDMODE=static CC="gcc -m32 -O3" cp src/libluajit.a ../window/x86/libluajit.a mingw32-make clean cd .. # build protobuf fengyun ban pbc from https://github.com/cloudwu/pbc/ cd pbc mingw32-make lib BUILDMODE=static CC="gcc -m32 -O3" cp build/libpbc.a ../window/x86/libpbc.a mingw32-make clean cd .. gcc -m32 -O3 -std=gnu99 -shared \ int64.c \ uint64.c \ tolua.c \ pb.c \ lpeg.c \ struct.c \ cjson/strbuf.c \ cjson/lua_cjson.c \ cjson/fpconv.c \ luasocket/auxiliar.c \ luasocket/buffer.c \ luasocket/except.c \ luasocket/inet.c \ luasocket/io.c \ luasocket/luasocket.c \ luasocket/mime.c \ luasocket/options.c \ luasocket/select.c \ luasocket/tcp.c \ luasocket/timeout.c \ luasocket/udp.c \ luasocket/wsocket.c \ luasocket/compat.c \ pbc/binding/lua/pbc-lua.c \ -o Plugins/x86/tolua.dll \ -I./ \ -Iluajit/src \ -Ipbc \ -Ipbc/src \ -Icjson \ -Iluasocket \ -lws2_32 \ -Wl,--whole-archive window/x86/libluajit.a window/x86/libpbc.a -Wl,--no-whole-archive -static-libgcc
这是修改好的win32平台编译脚本,修改了几个内容如下:
....
# 新加,编译pbc.a
# build protobuf fengyun ban pbc from https://github.com/cloudwu/pbc/ cd pbc
mingw32-make lib BUILDMODE=static CC="gcc -m32 -O3"
cp build/libpbc.a ../window/x86/libpbc.a
mingw32-make clean
cd ..
gcc -m32 -O3 -std=gnu99 -shared \
...
pbc/binding/lua/pbc-lua.c \ # 新加,要编译c代码,另一个是lua-53没用到
-o Plugins/x86/tolua.dll \
...
-Ipbc \ # 新加, 头文件目录
-Ipbc/src \# 新加,头文件目录
...
-Wl,--whole-archive window/x86/libluajit.a window/x86/libpbc.a -Wl,--no-whole-archive -static-libgcc
把生成的libpbc.a包含到dll中。
4.修改代码文件
pbc/binding/lua/pbc-lua.c 这个文件需要改一下
把 20行
#ifndef _MSC_VER
改成
#if !defined( _MSC_VER ) && !defined( __MINGW32__ ) && !defined( __MINGW64__)
因为我用的mingw + msys编译的,mingw没有_MSC_VER 这个定义,所以只好加mingw自己的
5.编译,运行mingw的msys.bat,在弹出的shell窗口cd到tolua#目录,运行./build_win32.sh生成tolua.dll在plugins/x86/目录下,拷贝到项目plugins/x86就好了。
6.使用
复制生成的dll文件到使用tolua#的unity项目plugins/x84或x86_64下,
修改luadll.cs,添加c接口,在适当的位置如下写
/*
** third party library
*/
[DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
public static extern int luaopen_protobuf_c(IntPtr L);
3.启动lua时注册proto库,
luaState.OpenLibs(LuaDLL.luaopen_pb);
luaState.OpenLibs(LuaDLL.luaopen_struct);
luaState.OpenLibs(LuaDLL.luaopen_lpeg);
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
luaState.OpenLibs(LuaDLL.luaopen_bit);
//lua.OpenLibs(LuaDLL.luaopen_bit);
#endif
//luaState.OpenLibs(LuaDLL.luaopen_sproto_core);
luaState.OpenLibs(LuaDLL.luaopen_protobuf_c);
就和lua注册别的第三方库一样,找到然后把proto的注册调用加上,就可以写lua代码了,参考pbc自带的demo
注:
tolua#项目地址https://github.com/topameng/tolua
如果没装mingwin的话可以下载tdm-gcc,在SourceForge搜tdm mingw就有http://jaist.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%20Installer/tdm64-gcc-5.1.0-2.exe
安装64位版的,因为也要编译64位dll。
安装方法:
1,运行安装文件,目录选择d:/mingw(自定义)
2,mingw安装到d:/mingw.配置bin目录到path环境变量。
3,下载msys,解压或安装(可以是执行文件和压缩包文件)到d:msys(自定义)https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/
4,修改msys目录下msys.bat,在第一行之前加入call "D:\Development\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"(vs2015的环境变量脚本,根据安装的vs来写,或者不加)
5,修改关联文件,d:msys/etc/fstab文件,可安装fstab.sample修改,即关联mingw所在安装目录,大致内容为:
#Win32_Path Mount_Point
D:/MinGW /mingw
6,基本完成了,执行msys.bat在弹出的shell窗口可以导航到tolua#进行编译了。
相关文章推荐
- 添加文件【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题
- cocos2dx-lua项目的构建、编译细则
- unity编译时自动结束项目运行
- quick-lua新建一个HelloWorld的项目并且编译Android版本
- 用好lua+unity,让性能飞起来——关于《Unity项目常见Lua解决方案性能比较》的一些补充
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题
- [Unity] Unity的lua项目中模拟每帧运行一次的协程
- 项目记录29--unity-tolua框架 c#导出定时器lua
- 项目记录28--unity-tolua框架 lua使用协程
- XLua笔记-将lua项目和unity工程放到VS中
- 带自定义类的Cocos2dx_lua项目编译到Android
- cocos2dx 3.1.1移植安卓apk (lua项目交叉编译 mac环境下)
- cocos2dx+lua编译Android项目
- 项目记录31--unity 简单分析LuaFramework_UGUI
- 项目记录24--unity-tolua框架 View01---UIBase.lua
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题 .
- Cococs2d-X 将Lua文件加入项目中并编译运行
- cocos2dx3.4 new Lua项目后编译黑屏问题的解决
- 创建Unity新项目并编译成游戏程序
- 【Cocos2dx-lua 3.11.1】编译cocos的simulator.exe用F5快捷刷新cocos-lua项目。