![v2-7eeb3220d41a1a2b76e63d60d69854c9_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34f990d8-2730-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-7eeb3220d41a1a2b76e63d60d69854c9_1440w.jpg?source=172ae18b)
首先到release页面下载cpp的release:
https://github.com/protocolbuffers/protobuf/releasesgithub.com比如这种:
![v2-205daf8233a455e774515aa2665f07b9_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=34f990d8-2730-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-205daf8233a455e774515aa2665f07b9_b.jpg)
你可以手动下载后解压,或者:
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.14.0/protobuf-cpp-3.14.0.tar.gz
tar -zxvf protobuf-cpp-3.14.0.tar.gz
cd protobuf-cpp-3.14.0
检查依赖文件是否齐全:
autoreconf -f -i
否则后续make可能会出现这样的问题:
![v2-beecf2dd6dac87f8c82e1ceabdb7bd52_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=34f990d8-2730-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-beecf2dd6dac87f8c82e1ceabdb7bd52_b.jpg)
正常的流程是:
./configure --prefix=/usr/local/
但是由于我们没有sudo权限,一方面不能使用bash运行configure,一方面无法写/usr/local/,所以这两个地方都需要做修改:
在./configure前面加上sh,后面的路径换成自己有权限的路径:
sh ./configure --prefix=替换成一个你拥有权限的目录
然后是:
make
make check
make install
即可等待安装完成,其中make和make check耗时较长,如果不愿意等,可以跳过make check 过程。
考虑到我们是在自己指定的目录下安装的,可能该目录没有被添加到本用户的环境变量下,因此可以:
vim ~/.bash_profile
然后把目录路径添加到PATH的最后面:
![v2-65401cbda4bb23fd7b4817401c0151e2_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=34f990d8-2730-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-65401cbda4bb23fd7b4817401c0151e2_b.jpg)
当初我弄到这里以为大功告成了,其实后面还有一大堆坑等着我,如果你写了一个protobuf的测试程序用原生g++进行编译,还会遇到大量的问题。
简单的说,你最好把protobuf手动添加到g++寻找头文件的路径、寻找动态、静态链接库的路径,否则后续编译可能会出很多奇怪的问题。当然你也可以在编译时使用-I、-L的命令,也许可以不用设置这些东西:
(这些也是在~/.bash_profile文件中设置的)
# 环境变量,中间用冒号隔开
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:$HOME/protobuf_lib/bin
export PATH
# g++找头文件的路径
CPLUS_INCLUDE_PATH=$HOME/protobuf_lib/include
export CPLUS_INCLUDE_PATH
# 找动态链接库的路径
LD_LIBRARY_PATH=$HOME/protobuf_lib/lib:/usr/local/lib:$HOME/workspace/MouseDB/lib/protobuf/lib
export LD_LIBRARY_PATH
# 找静态链接库的路径
LIBRARY_PATH=$HOME/protobuf_lib/lib:/usr/local/lib:$HOME/workspace/MouseDB/lib/protobuf/lib
export LIBRARY_PATH
# 找pkg_config的路径
export PKG_CONFIG_PATH=$HOME/protobuf_lib/lib/pkgconfig
最后再重新生效一下即可:
source ~/.bash_profile
BTW,如果后续编译出现google::protobuf::之类undefined的问题,请务必再编译时添加
-lprotobuf
两个参数,比如我的Makefile是这样的:
# proto测试