我尝试查找过很多资料,试图安装protobuf(V23.4)的最新版本,但是我都失败了。
- 使用apt-get安装失败----cmake无法查找到
- 使用google 的 bazel 编译器安装,可以成功安装protoc编译器,但是没有安装相关的怕protobuf的头文件,静态库都没有
- 使用make安装,需要的依赖环境出现很大的问题,总是缺少依赖
最后我放弃了 安装 21版本以后的protobuf,我选择可以自动配置的版本---安装了 3.20.3版本,
安装步骤
下载源码 地址如下:https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.20.3.tar.gz到你放置安装报的目录下:
cd 你的安装包路径
tar -zvxf 你的安装包
cd 进入解压路径中
提前准备安装所需要的工具
sudo apt-get install autoconf automake libtool
先进行自动配置,然后当前路径下会生成一个configure文件,指定安装路径
./autogen.sh
./configure --prefix=/usr/local
执行make构建
make -j4
sudo make install
安装完成以后 你可以进入 /usr/local/lib/ /usr/local/bin/ /usr/local/include/ 中 查看安装的内容
一个简单的命令如下:
ls -l /usr/lib/libproto*
检查 protoc 编译器的位置和版本
protoc --verison
which protoc
另外需要配置相关路径
sudo vim /etc/profile
然后在文件末尾插入
#执行程序搜索路径
export PATH=$PATH:/usr/local/bin
#(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
#(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
#c++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
测试代码
新建一个project文件夹,并进入
mkdir project
cd project
新建 CMakeLists.txt
vim CMakeLists.txt
插入代码
cmake_minimum_required(VERSION 3.5)
project(protobuf_test)
# 查找 Protobuf 库和头文件
find_package(Protobuf REQUIRED)
# 添加可执行文件
add_executable(protobuf_test main.cpp)
# 添加 Protobuf 头文件路径
target_include_directories(protobuf_test PUBLIC ${PROTOBUF_INCLUDE_DIR})
# 链接 Protobuf 库
target_link_libraries(protobuf_test ${PROTOBUF_LIBRARY})
message(STATUS "Protobuf include directories:")
foreach(dir ${PROTOBUF_INCLUDE_DIRS})
message(STATUS " ${dir}")
endforeach()
新建一个mian.cpp
vim main.cpp
插入代码
#include <iostream>
#include <google/protobuf/message.h> // 简单测试 看能不能链接
int main() {
std::cout << "Hello, Protobuf!" << std::endl;
return 0;
}
然后进行cmake编译和测试
// 在 project 路径下
mkdir bulid
cd bulid
// 执行
cmake ..
// cmake 构造完成 执行 make
// 观察输出
// Found Protobuf: /usr/local/lib/libprotobuf.so;-lpthread (found version "3.20.3")
make
// 查看可执行文件protobuf_test 执行
./protobuf_test
得到输出则编译完成,可以实现找到,编译都没问题,整体安装成功了
Hello, Protobuf!
特别感谢感谢这个博主的分享,参考链接:https://www.cnblogs.com/TaXueWuYun/p/17322623.html