在Ubuntu下安装ProtoBuf


安装 autoconf automake libtool curl make g++ unzip

sudo apt-get install autoconf automake libtool curl 1 make g++ unzip -y

可能需要添加清华源:

  1. 更新软件包列表并安装需要的软件包
    首先,将系统的包列表更新为清华大学的镜像源,然后安装所需的软件包。

  2. 更换为清华源
    你可以通过编辑 sources.list 文件来将镜像源更换为清华源。使用以下命令编辑 sources.list 文件:

    sudo nano /etc/apt/sources.list
    

    将文件中的内容替换为以下清华源:

    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    

    保存并关闭文件 (Ctrl+O, Enter, Ctrl+X)。

  3. 更新包列表
    使用以下命令更新软件包列表:

    sudo apt-get update
    
  4. 安装所需的软件包
    使用以下命令安装所需的软件包:

    sudo apt-get install autoconf automake libtool curl make g++ unzip -y
    

下载 ProtoBuf 编译器

下载地址:[https://github.com/protocolbuffers/protobuf/releases]

# 第一步执行autogen.sh,但如果下载的是具体的某一门语言,不需要执行这一步。
./autogen.sh
# 第二步执行configure,有两种执行方式,任选其一即可,如下:
# 1、protobuf默认安装在 /usr/local 目录,lib、bin都是分散的
./configure
# 2、修改安装目录,统一安装在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf
make // 执行15分钟左右
make check // 执行15分钟左右
sudo make install

有些同学可能会在make check 出现错误,例如:
请添加图片描述

出现以上错误的原因是test的模块里面有非常多的测试用例,这些用例对服务器环境要求特别严格,需要增大下swap分区,具体操作可参考:
https://blog.csdn.net/AlexWang30/article/details/90341172
(建议可以先扩大3G,再执行 make check 。如果还是报错,再扩大到10G重新执行 make
check )执行 make check 后 ,出现以下内容就可以执行 sudo make install 。
请添加图片描述

到此,需要你回忆一下在执行configure时,如果当时选择了第一种执行方式,也就是
./configure ,那么到这就可以正常使用protobuf了。如果选择了第二种执行方式,即修改了安装
目录,那么还需要在/etc/profile 中添加一些内容:

sudo vim /etc/profile
# 添加内容如下:
#(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执行程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

最后一步,重新执行 /etc/profile 文件:

source /etc/profile

检查是否安装成功

输入 protoc --version 查看版本,有显示说明安装成功:请添加图片描述

which protoc

这个命令的作用是查找 protoc 可执行文件的路径。例如,如果 protoc 可执行文件位于 /usr/local/bin/protoc,那么 which protoc 将返回这个路径。
请添加图片描述

ldd $(which protoc)

请添加图片描述

这个命令由两部分组成:

  1. $(which protoc)
    这个部分是一个命令替换,表示先执行 which protoc,然后将其输出的路径作为参数传递给 ldd 命令。例如,如果 which protoc 返回 /usr/local/bin/protoc,那么实际执行的命令将是 ldd /usr/local/bin/protoc

  2. ldd /usr/local/bin/protoc
    这个命令用于显示给定可执行文件(在本例中为 protoc)的所有依赖库。它会列出所有共享库(.so 文件)及其路径,以及这些库加载到内存中的地址。这对于检查可执行文件链接到哪些库文件特别有用。

合并解释

所以,整个命令 ldd $(which protoc) 的作用是:

  1. 使用 which protoc 找到 protoc 可执行文件的路径。
  2. 使用 ldd 列出 protoc 可执行文件依赖的所有共享库及其路径。

protoc 编译器链接到了 Anaconda 环境下的 Protobuf 库

如果 protoc 编译器链接到了 Anaconda 环境下的 Protobuf 库,而不是你在 /usr/local/protobuf 下安装的版本,比如:

(base) chen@Ali-Ubuntu20:~/protobuf-learning/quick_start$ ldd $(which protoc) 
linux-vdso.so.1 (0x00007ffc3c95a000) libprotoc.so.31 => /home/chen/anaconda3/bin/../lib/libprotoc.so.31 (0x00007fefd133e000) libstdc++.so.6 => /home/chen/anaconda3/bin/../lib/libstdc++.so.6 (0x00007fefd112a000) libgcc_s.so.1 => /home/chen/anaconda3/bin/../lib/libgcc_s.so.1 (0x00007fefd1110000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fefd0f17000) libprotobuf.so.31 => /home/chen/anaconda3/bin/../lib/./libprotobuf.so.31 (0x00007fefd0c65000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fefd0c40000) /lib64/ld-linux-x86-64.so.2 (0x00007fefd163a000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fefd0af1000) libz.so.1 => /home/chen/anaconda3/bin/../lib/././libz.so.1 (0x00007fefd0ad3000)

你需要确保你的 protoc 编译器和库文件来自相同的安装路径。以下是如何修复这个问题的步骤:

1. 修改 PATH 和 LD_LIBRARY_PATH 环境变量

你需要调整你的环境变量,使系统使用你在 /usr/local/protobuf 下安装的 Protobuf 编译器和库。

暂时修改环境变量

你可以在当前会话中暂时修改环境变量来验证配置:

export PATH=/usr/local/protobuf/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/protobuf/lib:$LD_LIBRARY_PATH

然后验证 protoc 版本和库文件路径:

protoc --version
ldd $(which protoc)
永久修改环境变量

如果以上步骤解决了问题,你可以将这些环境变量添加到你的 shell 配置文件(例如 ~/.bashrc~/.bash_profile),以便每次登录时自动设置:

echo 'export PATH=/usr/local/protobuf/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/protobuf/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

2. 确认并重新生成 .pb 文件

确保你使用的是正确版本的 protoc 编译器来生成 .pb.h.pb.cc 文件:

protoc --cpp_out=. contacts.proto

3. 编译项目

最后,使用新的设置重新编译你的项目:

g++ main.cc contacts.pb.cc -o TestProtoBuf -std=c++11 -lprotobuf
安装ProtobufUbuntu上可以按照以下步骤进行: 1. 打开终端,运行以下命令以安装所需的依赖项: ``` sudo apt-get install autoconf automake libtool curl make g++ unzip ``` 2. 克隆Protobuf的源代码,并进入源代码目录: ``` git clone https://github.com/google/protobuf.git cd protobuf ``` 3. 初始化和更新子模块并生成配置文件: ``` git submodule update --init --recursive ./autogen.sh ``` 4. 执行配置命令,生成Makefile: ``` ./configure ``` 5. 使用make命令编译Protobuf: ``` make ``` 6. (可选)运行make check命令进行测试。如果没有克隆子模块,测试可能会失败,但仍然可以继续安装。运行make install命令安装Protobuf: ``` make check sudo make install ``` 以上是在Ubuntu安装Protobuf的一般步骤。根据你的操作系统版本和其他特定条件,可能会有一些差异。如果你遇到任何问题,你可以参考引用提供的链接中详细的问题解决方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ubuntuprotobuf安装使用(详解)](https://blog.csdn.net/m0_46392035/article/details/124697124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [在 Ubuntu安装 Protobuf 3 的教程详解](https://download.csdn.net/download/weixin_38672800/12842115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_宁清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值