Protocol Buffers使用注意事項

2021-09-26 15:44:30 字數 732 閱讀 9529

protocol buffers做為廣泛使用的乙個序列化開源庫,提供了很多語言下的支援,本文就談談msvc c++使用pb遇到的問題,當然這些問題因為每個人的使用模式不同,可能都不一樣,本文也不討論怎麼寫proto及編譯。

我們使用pb做序列化可以把pb生成靜態庫或者動態庫(libprotobuf.dll),然後使用protoc將message生成相應的cc檔案,這些cc檔案結構都類似,基本不需要關心她做了什麼。若只是將這些cc在a,b兩個網路程式中傳輸資料都很正常。如果程式結構是a(可執行檔案)+b(動態庫),cc檔案在a,b之中都有使用,a呼叫b提供的介面,資料互動使用cc中的類,將乙個cpp檔案使用在不同的工程中是常態,但是這樣在msvc不行。以下分靜態庫和動態庫鏈結分別說明:

使用pb動態庫連線a、b:由於每個cc檔案會執行protobuf_namespace_id::internal::adddescriptors,導致「file already exists in database」。(加巨集定義protobuf_use_dlls)。

使用pb靜態庫鏈結a、b:由於setnoarena->isdefault返回false,所以string在a、b之間無法傳輸,此處是因為在a,b之中getemptystringalreadyinited不一致。

解決辦法:將所有message生成的cc封裝到乙個dll中,匯出class。將所有cc封裝為靜態庫未試,畢竟靜態只是中間檔案的打包。

執行環境:win10+vs2017

文中若有錯誤,歡迎斧正!

Protocol Buffers 學習筆記

1 安裝 ubuntu下的安裝很簡單 雖然要安裝幾個包 具體參見 url sudo apt get install autoconf automake libtool curl make g unzip autogen.sh configure make make check sudo make i...

Protocol Buffers 編譯工具安裝

作業系統 osx 語言環境 golang 解壓後 將bin下面的protoc檔案拷貝到 gopath下,gopath已經在path下,保證protoc在path下即可 我放在這裡,which protoc users macbook go bin protoc 然後,將include複製到 gopa...

Protocol Buffers 在iOS的使用

protocol buffers 簡單的說是對結構化的資料進行序列化 json格式 xml格式 的一種語言,但是更小 更快 更簡單,更多的用於im即時通訊這一塊,有助於節省流量,提高效能。protocol buffers 是谷歌的,官網連線 現在我們來簡單的體驗下 protocol buffers ...