|
由于我没有mac,所以没有xcode,所以没有编iOS版本的
windows下用msys2+mingw64去编译。
1. 下载msys2, http://www.msys2.org/ ,下载安装好之后打开,按照官网安装说明先更新一波
2. 参考这个 https://github.com/topameng/tolua_runtime/wiki ,安装mingw64就行,32位看情况吧。现在版本可能会有问题,会报libintl-8.dll is missing,然后导致mingw64.exe无法打开,这是因为没有安装mingw-w64-x86_64-gettext 东西的原因,指令是:pacman -S mingw-w64-x86_64-gettext 装了就好了,如果不对就pacman -Sl搜一下
3. 下载tolua# runtime版本https://github.com/topameng/tolua_runtime,
4. 下载pbc https://github.com/cloudwu/pbc ,把pbc放到tolua runtime版本的文件夹下
5. tolua文件夹下有一排.sh文件,把build_windows64.sh用编辑器打开,- #!/bin/bash
- # 64 Bit Version
- mkdir -p window/x86_64
- cd luajit-2.1
- mingw32-make clean
- mingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
- cp src/libluajit.a ../window/x86_64/libluajit.a
- mingw32-make clean
- cd ..
- #build protobuf yunfeng ban pbc from https://github.com/cloudwu/pbc
- cd pbc
- mingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
- cp build/libpbc.a ../window/x86_64/libpbc.a
- mingw32-make clean
- cd ..
- gcc -m64 -O2 -std=gnu99 -shared \
- tolua.c \
- int64.c \
- uint64.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 \
- pbc/binding/lua/pbc-lua.c \
- -o Plugins/x86_64/tolua.dll \
- -I./ \
- -Iluajit-2.1/src \
- -Iluasocket \
- -Ipbc \
- -Ipbc/src \
- -lws2_32 \
- -Wl,--whole-archive window/x86_64/libluajit.a window/x86_64/libpbc.a -Wl,--no-whole-archive -static-libgcc -static-libstdc++
复制代码 复制粘贴……自己比对去吧……注意一下pbc的东西
6. 打开mingw64.exe,我的路径是cd e:/git/tolua ,其他的看自己路径怎么写,总之先到这个.sh的路径去,然后./build_win64.sh回车等着吧。 7. 生成的dll在Plugins\x86_64,替换掉unity工程里的那个dll
8. Google的那个proto工具不一定有protoc.exe,没有就自己开工程编一个,这事儿一般找服务器……没有服务器就自己编好了……然后把这个protoc.exe跟protogen.exe放到一起去
9. 写个批处理文件,然后生成.pb文件- @echo off
- cd /d %~dp0
- set pbdest=..\..\Client\Assets\StreamingAssets\protopb
- for /r %%i in (*.proto) do (
-
- protoc.exe -I %~dp0 -o%pbdest%\%%~ni.pb %%i
- )
- pause
复制代码 我自己写了个测试路径,反正这种二进制文件,要在游戏开启的时候先加载,然后再启动lua虚拟机,然后再注册!!!切记!!!一定要先加载!!!!
p.s. 我这个路径里面,protoc.exe和proto文件在一个路径下,如果不在一个路径下,生成的pb文件可能有问题,反正如果拿不准就到时候打开看一下好了,看下文件名对不对。
10. 由于lua的io在客户端没法读文件,所以只能用unity拿到.pb文件生成byte数组然后传给lua使用,具体看项目需求了,lua里就是protobuf.register(xxxx),然后protobuf.decode("消息名", pb_data)解码,解出来的可能打印出来很诡异,没关系,拿着用就行。然后编码就是encode,看示例就好了。
这里面要说明的是
1. 打包的时候,只要mingw不报错,那就是没错,不要怀疑底层代码有问题。
2. 如果register失败,就看一下生成的.pb文件里面,文件名那个地方是不是路径不对,路径不对可能导致register失败,尤其是当一个proto文件import了另外一个proto文件的时候就很容易出这样的问题
3. decode出来的table打印出来可能很奇怪,但是只要按着proto定义xx.xx.xx.xx这么一直点出来就好了,内容肯定有。
4. 如果mingw配置有问题,去配置一下环境变量
参考文献
https://my.oschina.net/chaloongjir/blog/755954 |
|