1.安裝git工具,並將git下的bin目錄新增到path路徑中。
2.安裝mingw,並新增到path路徑中。
3.從中checkout原始碼。
5.編譯我們的protobuffer檔案,假定我們將protobuffer檔案xx.proto複製到gpb/bin目錄下,並在此目錄下建立乙個pb目錄,我們在gpb/bin目錄中再建立乙個批處理來生成erlang檔案,批處理檔案compile.bat內容如下:
escript protoc-erl -i. -o ./pb xx.proto
pause
該命令會將生成的erlang檔案放到gbp/bin/pb目錄中。這是只有乙個pb檔案的情況,在實際專案中,我們一般會有多個pb檔案,這些pb檔案可能還會有依賴關係,比如我們有兩個pb檔案xx.proto和yy.proto:
yy.proto:
package protocol;
option optimize_for = lite_runtime;
option cc_generic_services = false;
enum evalue
;
xx.proto:
package protocol;
import "yy.proto";
option optimize_for = lite_runtime;
option cc_generic_services = false;
message msg
;
這個時候執行compile.bat,會產生乙個錯誤:
in msg msg, field v1: undefined reference yy.evalue
說明目前的gpb還不支援具有依賴關係的pb,為了解決這個問題,我對原始碼進行了除錯,發現gpb在解析pb檔案時並沒有去處理依賴關係,既然沒處理依賴,那我們加上依賴的處理即可。找問題需要花時間,只要找到問題的根源了,解決起來也許就是一小段**就可以解決的事情。經除錯查詢,gpb解析pb原始檔的原始碼在gpb_parse.yrl檔案中,而解決pb依賴關係的**是由:
resolve_ref(defs, ref, root, fullname)
函式處理的,我們只需要加乙個解決依賴的**,然後在上面的函式中呼叫一下即可,完整**如下:
filterref([_,'.',type]) -> [type];
filterref(other) -> other.
%% -> |} | not_found
resolve_ref(defs, ref0, root, fullname) ->
ref = filterref(ref0),
case is_absolute_ref(ref) of
true ->
fullref = ensure_path_prepended(root, ref),
find_typename(fullref, defs);
false ->
possibleroots = compute_roots(fullname),
find_ref_rootwards(possibleroots, ref, defs)
end.
現在執行compile.bat就不會報錯了,可以在gpb/bin/pb目錄下看到四個檔案。
btw:寫完本部落格才發現之前有寫過一類似的部落格,當時csdn無法登入,在寫的,參見:
祝玩得開心!
如何將表單居中顯示 如何將重複資料突出顯示?
將 中一列資料中重複的,使用特殊顏色突出顯示或者使用一些符號標記出來。例如 乙個 商,可以邀請別的 商加入成為聯合體,報表要顯示所有 商,然後 商最後一列顯示所有聯合體,當聯合體 商跟別的 商重複時要突出顯示,並且加星號。用設計器自帶 demo 資料來源中的訂單明細資料表,使用嚮導建立一張分組報表,...
如何將FBReader引入MID
1.從fbreader的官網 得到源 包 這裡用到的是fbreader 0.8.17 2.編譯,執行make,報錯,這是因為其用到了linebreak這個庫,他是負責處理unicode編碼文件的換行問題的。google到linebreak,make,將debugdir裡的 a o全部複製到 usr ...
如何將Flutter引入AndroidStudio
相信不少道友們了解了一些flutter相關的知識,兄弟愚鈍,今始方入坑中來,為方便後來之人亦己常顧之,特記錄在部落格當中 廢話不多講,學習flutter可以參考flutter中文網,裡面有詳細的介紹及搭建方法。我就把我如何引入到as中的過程記錄下來。小弟的環境是win10,下面介紹的也是此環境下的引...