在編譯chromium代碼的過程當中發現,官方推薦使用的版本是ubuntu16.04,可是這個版本的ubuntu比較老舊,一些庫都比較老了,可是google本身用的部分倒是挺新的,protobuf就是一個例子,在ubuntu16.04上默認安裝的protobuf的版本是2.6.1,可是chromium在執行的時候用的是本身代碼編譯出的protobuf庫,版本是3.5.1就會報錯,提示你版本不兼容,比較坑的是,這個東西是在執行二進制文件的時候報錯的,就是須要會從新編譯。同時須要安裝新版本的protobuf
,報錯以下所示linux
[libprotobuf FATAL ../../third_party/protobuf/src/google/protobuf/stubs/common.cc:79] This program was compiled against version 2.6.1 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.5.1). Contact the program author for an update. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in "/build/mir-O8_xaj/mir-0.26.3+16.04.20170605/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc".) Aborted (core dumped)
若是原來有則須要卸載,能夠經過protoc --version
查看當前版本,版本不對能夠卸載git
$ sudo apt remove libprotobuf-dev #這個不肯定是否須要卸載 $ sudo apt remove protobuf-compiler
在ubuntu16.04上安裝protobuf
要先肯定一點,你要安裝的版本的是多少,在這個網址https://github.com/protocolbuffers/protobuf/tags下載你所須要的包,語言也須要搞清楚,例如我用於C++編譯的3.5.1版本的包,下載protobuf-cpp-3.5.1.tar.gz
就行了。(其餘語言就下其餘版本的,若是全都要能夠下all的)
下好以後解壓,進入解壓後的目錄,準備開始安裝
須要注意的一點是這個protobuf默認安裝在/usr/local,在一些平臺上/usr/local/lib默認不是LD_LIBRARY_PATH,你能夠手動添加,可是若是把安裝目錄指定在/usr會更簡單省事兒。
那麼怎麼指定呢?下面是默認安裝命令,可是先別急着執行github
$ ./autogen.sh $ ./configure $ make $ make check $ sudo make install $ sudo ldconfig # refresh shared library cache.
/usr/local不是LD_LIBRARY_PATH,可是/usr是啊,改下默認安裝路徑,在執行第二步的時候指定shell
$ ./configure --prefix=/usr
若是沒有指定有可能會出現找不到庫的狀況能夠經過protoc --version
查看,找不到庫會報錯,若是能找到就會顯示安裝的版本
手動添加到/etc/profile中ubuntu
$ sudo vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/ export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib/ export PATH=$PATH:/usr/local/bin/ export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include/ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include/ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
而後重啓,查看版本驗證便可vim
後來發現報錯不是由於系統庫版本太低,而是系統使用的這個文件的頭部顯示mir_protobuf.pb.cc
這個文件是由2.6.1的protobuf-compiler
編譯得來的,這就說明沒法經過安裝更高版本的庫來解決這個問題,由於這個文件是系統已經有的,不能經過從新安裝新庫來解決這個問題。經過提高系統版本的方式解決這個問題比較穩妥。ui