在C語言環境下使用google protobuf

        本文寫給經常使用C編程且不喜歡C++而又要經常使用google protobuf的人。
        經常寫通訊程序的人對數據進行序列化或者反序列化時,可能經常使用google的protobuf(PB),其優點多多,不用我在這裏贅述。
        google官方的PB可以跨語言使用,唯獨缺了C語言。禮失求諸野,我在網上找到了一個非官方的protobuf-c,其官方網址是http://code.google.com/p/protobuf-c/,令人奇怪的是這麼好的東東從2011年下半年後再無更新,令人遺憾。
        使用這個工具之前當然是先安裝它了。安裝它之前請先下載最新版本的protobuf並安裝它,然後再安裝protobuf-c。
        PB的安裝過程如下:
        1 到PB官方網站 https://code.google.com/p/protobuf/ 下載PB的安裝包,如protobuf-2.5.0.tar.gz;
        2 用命令tar -zxf protobuf-2.5.0.tar.gz 對壓縮包解壓;
        3 進入解壓後的源碼目錄 cd protobuf-2.5.0;
        4 在linux 上以root權限執行下列命令./configure --prefix=/usr/local/protobuf &&  make && ake check && make install
        5 在/etc/profile中添加下列兩行:
                export PATH=$PATH:/usr/local/protobuf/bin/
                export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
           在你home目錄下的~/.bashrc添加下列兩行:
                export PATH=$PATH:/usr/local/protobuf/bin/
                export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
        6 仍然以root身份打開/etc/ld.so.conf,添加下面一行:
                /usr/local/protobuf/lib

         7 以root身份執行命令ldconfig。

         然後安裝PC,安裝步驟如下:

        1 直接點擊這裏直接下載我修改過的PC安裝包myprotobuf-c-0.15.xz(請放心下載,只要你有csdn賬號,就可以下載,下載時候不需要分數);
        2 用命令tar -Jxf myprotobuf-c-0.15.xz對壓縮包進行解壓;
        3 進入源碼目錄protobuf-c-0.15,在此處可查看change_list.txt文件,裏面說明了我對源碼的修改之處;
        4 在linux以root身份執行安裝命令./configure --prefix=/usr/lib64/protobuf_c CXXFLAGS=-I/usr/lib64/protobuf/include LDFLAGS=-L/usr/lib64/protobuf/lib64 && make && make install
        5 在/etc/profile和~/.bashrc中修改PATH等變量結果,修改結果如下:

                export PATH=/usr/lib64/protobuf/bin:$/usr/lib64/protobuf_c/bin:PATH

                export PKG_CONFIG_PATH=usr/lib64/protobuf/lib64/pkgconfig:  /usr/lib64/protobuf_c/lib64/pkgconfig
               注意這裏的結果已經把上面PB的修改結果也包含進去了。
        6 仍然以root身份打開/etc/ld.so.conf,添加下面一行:
                /usr/lib64/protobuf_c/lib64/
        7 以root身份執行命令ldconfig。 

        安裝完成後,可以寫代碼了。PC編譯proto文件的命令格式是protoc-c --c_out=./   test.proto。

        大家可以先寫幾個簡單的程序測試下它的有效性,protobuf-c(PC)官方網址http://code.google.com/p/protobuf-c/wiki/Examples 裏面就有很多很好的測試用例。 

        使用過後,可能有的看法有:
        1 PC的API太簡單了,無法與PB相提並論;
        2 proto文件中定義的message被PC轉換爲源碼時,相應的class名稱被改變,且函數名稱也是不甚明瞭。
        針對第一看法,本文不予討論,因爲本文開頭第一段就說明了使用PC的是不喜歡C++的人,PC的API雖簡單而這正體現了C的靈活性。
        我屬於持有第二種看法的人,原PC的class名稱和message名稱不一致而且不簡短,class的函數名稱也是不夠簡潔。原PC遵循New BSD License,所以爲了達到目的------我直接把PC的源碼修改了。
        我修改的代碼已經上傳到csdn的資源庫中,請點擊這裏下載。依我往常的慣例,零分下載,歡迎大家有問題或者疑問隨時跟我聯繫,我的email是[email protected]
        我的測試用例也一併上傳,請點擊這裏下載。
        請大家看看測試用例中的pc_public.h文件,相信大家會體會到宏的好處。
        另外,大家仔細查看測試用例的makefile中INC和LIB兩個變量的值,大家自己使用我的PC寫程序的時候儘量加上這兩個變量或者直接參考我的makefile進行修改,以防止自己的程序在編譯或鏈接的時候出問題。
        侯捷說過“源碼之前,了無密碼”,此乃至理名言。本篇blog可以算作是我的測試用例的readme,希望有心人仔細去看我的測試用例。

        是記也,原創url是 http://write.blog.csdn.net/postedit/16107201, 不經允許,不得轉載。

        此畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章