0%

CentOS下无sudo安装protobuf的过程

首先到release页面下载cpp的release:

https://github.com/protocolbuffers/protobuf/releasesgithub.com

比如这种:

img

你可以手动下载后解压,或者:

1
2
3
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

检查依赖文件是否齐全:

1
autoreconf -f -i

否则后续make可能会出现这样的问题:

img

正常的流程是:

1
./configure --prefix=/usr/local/

但是由于我们没有sudo权限,一方面不能使用bash运行configure,一方面无法写/usr/local/,所以这两个地方都需要做修改:

在./configure前面加上sh,后面的路径换成自己有权限的路径:

1
sh ./configure --prefix=替换成一个你拥有权限的目录

然后是:

1
2
3
make
make check
make install

即可等待安装完成,其中make和make check耗时较长,如果不愿意等,可以跳过make check 过程。

考虑到我们是在自己指定的目录下安装的,可能该目录没有被添加到本用户的环境变量下,因此可以:

1
vim ~/.bash_profile

然后把目录路径添加到PATH的最后面:

img

当初我弄到这里以为大功告成了,其实后面还有一大堆坑等着我,如果你写了一个protobuf的测试程序用原生g++进行编译,还会遇到大量的问题。

简单的说,你最好把protobuf手动添加到g++寻找头文件的路径、寻找动态、静态链接库的路径,否则后续编译可能会出很多奇怪的问题。当然你也可以在编译时使用-I、-L的命令,也许可以不用设置这些东西:

(这些也是在~/.bash_profile文件中设置的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 环境变量,中间用冒号隔开
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

最后再重新生效一下即可:

1
source ~/.bash_profile

BTW,如果后续编译出现google::protobuf::之类undefined的问题,请务必再编译时添加

1
-lprotobuf -lpthread

两个参数,比如我的Makefile是这样的:

1
2
3
# proto测试
proto_test : test/test_proto/proto_test.cc
g++ -wall $^ -g -o test/test_proto/$@ -std=c++11 -lprotobuf -lpthread

本文地址: https://www.chimaoshu.top/CentOS下无sudo安装protobuf的过程/
版权声明:本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议,转载请注明出处。

Welcome to my other publishing channels