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

Unity的lua项目为Tolua# 编译protobuf

[复制链接]
发表于 2021-10-4 07:23 | 显示全部楼层 |阅读模式
2019独角兽企业重金招聘Python工程师标准>>>



记录以备忘
因为有别的现有架构,所以只是换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#项目结构为


    修改编译脚本
  1. #!/bin/bash
  2. # 32 Bit Version
  3. mkdir -p window/x86
  4. # mingw32-make = 'C:\Ruby\DevKit\mingw\bin\mingw32-make.exe'
  5. cd luajit
  6. mingw32-make clean
  7. mingw32-make BUILDMODE=static CC="gcc -m32 -O3"
  8. cp src/libluajit.a ../window/x86/libluajit.a
  9. mingw32-make clean
  10. cd ..
  11. # build protobuf fengyun ban pbc from https://github.com/cloudwu/pbc/
  12. cd pbc
  13. mingw32-make lib BUILDMODE=static CC="gcc -m32 -O3"
  14. cp build/libpbc.a ../window/x86/libpbc.a
  15. mingw32-make clean
  16. cd ..
  17. gcc -m32 -O3 -std=gnu99 -shared \
  18.     int64.c \
  19.     uint64.c \
  20.     tolua.c \
  21.     pb.c \
  22.     lpeg.c \
  23.     struct.c \
  24.     cjson/strbuf.c \
  25.     cjson/lua_cjson.c \
  26.     cjson/fpconv.c \
  27.     luasocket/auxiliar.c \
  28.     luasocket/buffer.c \
  29.     luasocket/except.c \
  30.     luasocket/inet.c \
  31.     luasocket/io.c \
  32.     luasocket/luasocket.c \
  33.     luasocket/mime.c \
  34.     luasocket/options.c \
  35.     luasocket/select.c \
  36.     luasocket/tcp.c \
  37.     luasocket/timeout.c \
  38.     luasocket/udp.c \
  39.     luasocket/wsocket.c \
  40.     luasocket/compat.c \
  41.     pbc/binding/lua/pbc-lua.c \
  42.     -o Plugins/x86/tolua.dll \
  43.     -I./ \
  44.     -Iluajit/src \
  45.     -Ipbc \
  46.     -Ipbc/src \
  47.     -Icjson \
  48.     -Iluasocket \
  49.     -lws2_32 \
  50.     -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#进行编译了。



转载于:https://my.oschina.net/chaloongjir/blog/755954

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-24 18:41 , Processed in 0.091788 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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