在编译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