找回密码
 立即注册
查看: 350|回复: 0

Tolua#添加云风的PBC插件

[复制链接]
发表于 2021-10-4 09:20 | 显示全部楼层 |阅读模式
由于我没有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用编辑器打开,
  1. #!/bin/bash
  2. # 64 Bit Version
  3. mkdir -p window/x86_64
  4. cd luajit-2.1
  5. mingw32-make clean
  6. mingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
  7. cp src/libluajit.a ../window/x86_64/libluajit.a
  8. mingw32-make clean
  9. cd ..
  10. #build protobuf yunfeng ban pbc from https://github.com/cloudwu/pbc
  11. cd pbc
  12. mingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
  13. cp build/libpbc.a ../window/x86_64/libpbc.a
  14. mingw32-make clean
  15. cd ..
  16. gcc -m64 -O2 -std=gnu99 -shared \
  17. tolua.c \
  18. int64.c \
  19. uint64.c \
  20. pb.c \
  21. lpeg.c \
  22. struct.c \
  23. cjson/strbuf.c \
  24. cjson/lua_cjson.c \
  25. cjson/fpconv.c \
  26. luasocket/auxiliar.c \
  27. luasocket/buffer.c \
  28. luasocket/except.c \
  29. luasocket/inet.c \
  30. luasocket/io.c \
  31. luasocket/luasocket.c \
  32. luasocket/mime.c \
  33. luasocket/options.c \
  34. luasocket/select.c \
  35. luasocket/tcp.c \
  36. luasocket/timeout.c \
  37. luasocket/udp.c \
  38. luasocket/wsocket.c \
  39. pbc/binding/lua/pbc-lua.c \
  40. -o Plugins/x86_64/tolua.dll \
  41. -I./ \
  42. -Iluajit-2.1/src \
  43. -Iluasocket \
  44. -Ipbc \
  45. -Ipbc/src \
  46. -lws2_32 \
  47. -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文件
  1. @echo off
  2. cd /d %~dp0
  3. set pbdest=..\..\Client\Assets\StreamingAssets\protopb
  4. for /r %%i in (*.proto) do (
  5.        
  6.         protoc.exe -I %~dp0 -o%pbdest%\%%~ni.pb %%i       
  7. )
  8. 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
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 18:45 , Processed in 0.088254 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表