文档章节

Unity的lua项目为Tolua# 编译protobuf

野山菌
 野山菌
发布于 2016/10/09 19:05
字数 852
阅读 4240
收藏 0

记录以备忘

因为有别的现有架构,所以只是换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 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.使用

  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#进行编译了。

 

© 著作权归作者所有

野山菌
粉丝 3
博文 44
码字总数 12804
作品 0
朝阳
私信 提问
加载中

评论(5)

野山菌
野山菌 博主

引用来自“椰子aaaa”的评论

求留个联系方式,交流学习下
qq吧 2218892635
椰子aaaa
求留个联系方式,交流学习下
椰子aaaa
多谢交流。我按你说的方式修改还是有其他报错,请问遇到过没。我用的也是mingw+msys
报错提示是:
pbc/binding/lua/pbc-lua.c:27:0: warning: "alloca" redefined [enabled by default]

#define alloca _alloca
^
In file included from pbc/binding/lua/pbc-lua.c:18:0:
d:\mingw\x86\include\malloc.h:64:0: note: this is the location of the previous d
efinition
#define alloca(x) __builtin_alloca((x))
野山菌
野山菌 博主

引用来自“椰子aaaa”的评论

你好。我按照你的方式也想使用Tolua#+pbc,但是最后报错如下:
pbc/binding/lua/pbc-lua.c:23:20: fatal error: alloca.h: No such file or directory
麻烦指教下,或者留个qq交流下可以不。非常感谢
pbc/binding/lua/pbc-lua.c 这个文件需要改一下

#ifndef _MSC_VER
改成
#if !defined( _MSC_VER ) && !defined( __MINGW32__ ) && !defined( __MINGW64__)

因为我用的mingw + msys编译的,mingw没有_MSC_VER 这个定义,所以只好加mingw自己的
椰子aaaa
你好。我按照你的方式也想使用Tolua#+pbc,但是最后报错如下:
pbc/binding/lua/pbc-lua.c:23:20: fatal error: alloca.h: No such file or directory
麻烦指教下,或者留个qq交流下可以不。非常感谢
【专栏精选】网络封包神器protobuf简介

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/zhenghongzhi6/article/details/94589294 本文节选自洪流学堂公众号技...

关尔Manic
07/03
0
0
关于Unity和Lua使用的计划

To:陈方星 Unity和Lua,在跨语言使用时,一个是C#,一个是Lua,运行时代码和内润格空间是有差异的。 两个运行时代码如何传递数据和转换数据格式,我问了昆仑的朋友。 他们的做法是采用了pro...

ebehemoth
2015/04/23
3
2
cocos2dx3.4 lua整合protobuf

网上看了一些资料但还是遇到不少问题。在这里记录一下 下载地址: https://github.com/sean-lin/protoc-gen-lua.git 1. 复制文件 protoc-gen-lua/protobuf/pb.c 到 frameworkscocos2d-xexter...

千山万水
2015/03/30
5.2K
0
quick-cocos2d-x使用protobuf

1、下载pbc项目 https://github.com/miaodadao/pbc 2、proto生成pb文件 https://code.google.com/p/protobuf/downloads/list 下载protoc文件,然后切换到上面下载完成后解压的文件下调用下面...

千山万水
2014/05/05
1K
0
quick-cocos2d-x protobuf

1、下载pbc项目 https://github.com/miaodadao/pbc 2、proto生成pb文件 https://code.google.com/p/protobuf/downloads/list 下载protoc文件,然后切换到上面下载完成后解压的文件下调用下面...

小房小田
2014/04/03
613
0

没有更多内容

加载失败,请刷新页面

加载更多

【jQuery基础学习】05 jQuery与Ajax以及序列化

本文转载于:专业的前端网站➭【jQuery基础学习】05 jQuery与Ajax以及序列化 好吧,这章不像上章那么水了,总是炒剩饭也不好。 关于AJAX 所谓Ajax,全名Asynchronous JavaScript and XML。(也...

前端老手
19分钟前
8
0
CVE-2019-14287(Linux sudo 漏洞)分析

作者:lu4nx@知道创宇404积极防御实验室 作者博客:《CVE-2019-14287(Linux sudo 漏洞)分析》 原文链接:https://paper.seebug.org/1057/ 近日 sudo 被爆光一个漏洞,非授权的特权用户可以...

极客君
20分钟前
4
0
关于分布式,你需要知道的真相

目录 一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基...

李红欧巴
20分钟前
6
0
读书笔记:深入理解ES6 (附录B)

附录B:了解ES7(2016)   ES6经历了4年的发展,之后TC-39决定将发布周期转换为每年一版,以确保新语言特性能够更快地发展。   ES6中添加了三个语法特性,下面一一来讲。 第1节 指数运算...

张森ZS
26分钟前
11
0
计算机公开课推荐 2019.8

欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 编程 哈佛 CS50:计算机科学导论 视频 MIT 6.00.1x:计算机科...

ApacheCN_飞龙
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部