Quick-Cocos2d-x 集成 Google protobuf 方法
生活随笔
收集整理的這篇文章主要介紹了
Quick-Cocos2d-x 集成 Google protobuf 方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一步 ? 需要最新的protobuf 類庫和解析程序。? 下載地址:https://github.com/sean-lin/protoc-gen-lua git clone?https://github.com/sean-lin/protoc-gen-lua.git?到任意的一個地方
然后,可以得到重要的兩個目錄
?
| 1 2 | protoc-gen-lua/plugin/? protoc-gen-lua/protobuf/ |
?
?
第二步, 需要使用protoc —lua_out=. 這種方法, 將我們自己的*.proto 的文件解析成lua文件plugin目錄是提供將buffer 文件解析成lua 版本的類庫, 需要python 支持。 ?如果已經編譯了google 官方的protoc 那個程序, 只需要在系統PATH環境變量總追加plugin目錄就好:
?
| 1 | export PATH={protoc-gen-lua DIR }/plugin:$PATH |
?
關于protoc的編譯另請google . 如果解析不出lua文件來, 可以手動志信一下plugin/protoc-gen-lua的程序, 他應該是+x 的權限(chmod +x plugin/protoc-gen-lua) 細節的安裝步驟可以參考?https://code.google.com/p/protoc-gen-lua/ 第三步 , 將protobuf 集成到quick 中 protoc-gen-lua/protobuf/ 目錄就是要編譯到quick-cocos2d-x目錄里面的部分。? 現在, 我們只需要 protoc-gen-lua/protobuf/pb.c 這個文件?先確定自己的quick-cocos2d-x lua擴展目錄:
?
| 1 | /quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/ |
?
所有lua 的c/c++現成擴展,都可以直接放到這里。? 將pb.c這個文件復制到 lua_extension目錄下, 最好獨立一個目錄, 免得擴展多了亂。?這是我的目錄結構:
?
| 1 | ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c |
?
然后開始修改擴展程序配置文件, lua_extensions.c路徑為:
?
| 1 | ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c |
?
目前是一個不足60行的小文件, 我打算全部貼進來:
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include "lua_extensions.h"? ??? #if __cplusplus? extern "C" {? #endif? ???? // cjson? #include "cjson/lua_cjson.h"? ???? ???? // zlib? #include "zlib/lua_zlib.h"? ???? ???? // lpack? #include "lpack/lpack.h"? ???? ???? // socket? #include "socket/luasocket.h"? #include "socket/mime.h"? #include "socket/socket_scripts.h"? ???? ???? // filesystem? #include "filesystem/lfs.h"? ???? ???? // lsqlite3? #include "lsqlite3/lsqlite3.h"? ???? ???? #include "protobuf/pb.c"?? //引用protobuf 庫文件? ???? ???? static luaL_Reg luax_exts[] = {? ?????{"cjson", luaopen_cjson_safe},? ?????{"zlib", luaopen_zlib},? ?????{"pack", luaopen_pack},? ?????{"socket.core", luaopen_socket_core},? ?????{"mime.core", luaopen_mime_core},? ?????{"lfs", luaopen_lfs},? ?????{"lsqlite3", luaopen_lsqlite3},? ?????{NULL, NULL}? };? ???? ???? void luaopen_lua_extensions(lua_State *L)? {? ?????// load extensions? ?????luaL_Reg* lib = luax_exts;? ?????lua_getglobal(L, "package");? ?????lua_getfield(L, -1, "preload");? ?????for (; lib->func; lib++)? ?????{? ?????????lua_pushcfunction(L, lib->func);? ?????????lua_setfield(L, -2, lib->name);? ?????}? ?????lua_pop(L, 2);? ???? ???? ?????// load extensions script? ?????luaopen_socket_scripts(L);? ?????luaopen_pb(L);?? //這是加入的protobuf 擴展注冊名? }? ???? ???? #if __cplusplus? } // extern "C"? #endif |
?
至此 , protobuf 擴展部分就算擴展完成了。? 確認是否成功支持 , 可以在quick 項目最先被調用的lua文件中追加 require "pb" 做測試。? *但這時候通過protoc 轉碼后得到的lua文件還不能被解析。? 第四步 從項目中包含protobuf的 lua庫 protoc-gen-lua/protobuf/這個目錄下面, 還有大量的.lua文件, 是用來支持proto轉碼后的文件解析調用的。 不能少了這些文件。? 復制protoc-gen-lua/protobuf文件夾 到項目中 scripts目錄下。 ?目錄結構應該是這樣的:
?
| 1 | [PROJECT]/scripts/protobuf/*.lua |
?
然后, 需要告訴框架,從哪里可以引用到它。?修改main.lua 在require("appxxxxxx") 上面 , 加入下面的代碼:
?
| 1 | package.path = package.path .. ";./protobuf/?.lua;./scripts/protobuf/?.lua;" |
?
這個方法, 能保證程序在被編譯到手機之后仍然可以繼續訪問這個庫。? ***千萬別把轉碼的proto文件放到[PROJECT]/scripts/protobuf 目錄里面.不信可以試試。 現在, 項目支持protobuf 文件的解析了。 第五步 ?重新編譯player-x 如果不習慣用player-x調試, 這個步驟不是必須的。?進入player-x qt源碼目錄 :
?
| 1 | cd quick-cocos2d-x/player/proj.qt |
?
使用qmake 文件執行quick-x.pro 文件?
?
| 1 | qmake ./quick-x.pro |
?
繼續: make? 等待結束, 將得到的quick-x-player文件,? 放到:quick-cocos2d-x/player/bin/mac/ 目錄下, 這樣sublime text 裝QuickXDev 擴展的直接可以用。? **如果是mac os 10.9 系統, 可能編譯不過去player-x程序。 我遇到了這個問題。? 會提示錯誤 ?pb.c:28:10: fatal error: 'endian.h' file not found?如果錯誤信息相同, 修改文件:
?
| 1 | ./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c |
?
查找行:
?
| 1 | #include <endian.h> |
?
臨時變更為:
?
| 1 | #include <machine/endian.h> |
?
然后重新編譯 player-x? make 就足夠了? make **player-x 編譯完畢后, 千萬要將endian.h 引用改回原來的 #include <endian.h> , 否則打包到手機的時候又回提示文件找不到了。總結
以上是生活随笔為你收集整理的Quick-Cocos2d-x 集成 Google protobuf 方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 薏米红豆粥功效及做法介绍
- 下一篇: javaSE基础之记事本编程