记录以备忘

因为有别的现有架构,所以只是换lua中间件,同时需要protobuf,所以使用pbc加入编译。tolua#在github上就有simpleframwork可用,个人项目可以使用。

  1. 下载tolua# 的runtime项目 https://github.com/topameng/tolua.git到D:/tolua#
  2. 下载luapbc 项目https://github.com/cloudwu/pbc.git到D:/tolua#/pbc

    此时tolua#项目结构为

  3. 修改编译脚本
#!/bin/bash
# 32 Bit Version
mkdir -p window/x86
# mingw32-make = 'C:\Ruby\DevKit\mingw\bin\mingw32-make.exe'
cd luajit
mingw32-make cleanmingw32-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.使用

  1. 复制生成的dll文件到使用tolua#的unity项目plugins/x84或x86_64下,
  2. 修改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#进行编译了。

Unity的lua项目为Tolua# 编译云风版protobuf相关推荐

  1. tolua#是Unity静态绑定lua的一个解决方案

    tolua#是Unity静态绑定lua的一个解决方案 参考文章: (1)tolua#是Unity静态绑定lua的一个解决方案 (2)https://www.cnblogs.com/Leo_wl/p/6 ...

  2. 【转】UNITY之LUA加密

    [转]UNITY之LUA加密 来自:Lua加密 两种方式:一种用luac,一种用luajit luac加密: 1.lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,去官网下 ...

  3. Unity 之 Lua使用Vector3遇到的问题

    Unity 之 Lua使用Vector3遇到的问题 1.正常使用 2.遇到问题 3.原来如此 4.ToLua中的V3实现表 1.正常使用 在Lua使用的形式和C#中大致相同,只是Lua使用表的形式来模 ...

  4. _Linux自编译云锁Web网站防火墙,看完小白也能保护网站安全

    图/文:迷神 之前写了一篇云锁防护网站入侵攻击的文章,但是那个是基于宝塔自带的添加模块功能,有的人说,不带那个功能.那接下来,我们就讲讲Linux下通过自编译Nginx添加云锁Web网站防火墙模块,这 ...

  5. Unity 入门教程:贪吃射(1) —— Unity 安装和项目创建

    **这是一个系列教程,我将通过这个系列教程从零开始教你用Unity制作一个2D的贪吃蛇小游戏.凡事开头难这个教程不会让你马上精通Unity但是会让你对Unity有个初步的认知,好了废话不多说马上就进入 ...

  6. Unity开发VR项目——问题集锦

    一.StreamVR问题: 1.运行项目时不显示手柄控制器: 出现这种情况一般会在头显中提示不能加载按键配置文件,出现这种提示时请直接打开steam(注意不是steamVR哈),按照我的了解应该是按键 ...

  7. unity 导出 ios 项目运行在模拟器

    1.unity支持把项目导出到iOS真机和模拟器,只要在player setting选中相应的sdk就可以了,默认是device. 2.提示错误后

  8. 嵌入式Linux小项目之图片编解码播放器学习导读

      首先欢迎大家阅读本篇文章,在这里我将会为大家简要介绍一下图片编解码播放器系列文章的学习路线.   该小项目共有七篇文章,分别为<嵌入式Linux小项目之图片编解码播放器(1-7)>,这 ...

  9. unity 粒子插件_收藏就完事了!Oculus Quest和Unity创意开源项目,你不码住嘛?!...

    [AIRX实验室]专栏会定期为大家推荐一些可移植性强的.可二次开发应用的.可落地实际场景使用的实战工程源码分享给大家.另外有优秀的demo或案例推广.解决方案对接的也可以联系我们(尾部有联系方式).本 ...

  10. Unity实战之牧师与魔鬼(动作分离版)

    Unity实战之牧师与魔鬼(动作分离版) 项目链接 整体描述 本次项目在第一版牧师与魔鬼的基础上,将动作从场记中分离出来,并设计一个裁判类实时监测游戏进行的情况.这样改进的优点有很多: 降低了不同功能 ...

最新文章

  1. JVM Class字节码之三-使用BCEL改变类属性
  2. flask框架(十): 闪现
  3. 【小白冲冲冲!!!】补1: 说一下最大化后验概率
  4. OC学习3——C语言特性之指针
  5. 爱奇艺技术分享:轻松诙谐,讲解视频编解码技术的过去、现在和将来
  6. 电赛模拟训练日志总结三(红外光通信装置)
  7. cognex扫码枪识别内容直接_S7-1200与 扫 描 枪 Cognex DM60S 通信问题。
  8. 关于微信小程序的navigator标签
  9. 使用android studio设置签名信息
  10. PDF文件中的图片导出
  11. OCR(图片识别)之 百度 VS 谷歌
  12. 什么是真正的互联网思维?
  13. 50欧姆系统的由来的小故事
  14. java登陆注册 mysql_Java+mysql用户注册登录功能
  15. 用python语言绘制美丽图形
  16. 解释相机中的弥散现象
  17. 小蓝同学的前端之旅--HTML\CSS集成复习
  18. 京东到家撤退无人货架及时止血  无人货架整个行业是否都要凉凉了!
  19. OpenCV图像处理(十二)---图像阈值化
  20. UTF8_Encoding

热门文章

  1. Rust : 高富帅的match
  2. (转)因巨亏而著名的10大魔鬼交易员
  3. 人民日报刊发浪潮集团董事长孙丕恕署名文章:更好实现数据共享
  4. 【数字基带信号】基于matlab数字双相码仿真【含Matlab源码 989期】
  5. 【元胞自动机】基于matlab元胞自动机交通流仿真【含Matlab源码 827期】
  6. 证书重新生成_Kubernates证书过期问题的解决
  7. 例4.3 数制转换 - 九度教程第44题(进制转换)
  8. java xstream json_详解XML,Object,Json转换与Xstream的使用
  9. 学校计算机教师事迹材料,中学信息技术优秀教师事迹材料:信念在“用心”中闪光...
  10. sql与mysql数据对接_SQL Server 对接MySQL 数据库