windows(vs2017) 和 ubutun 平台下 使用 protobuf 3.5.1 安装及使用 防坑指南
程序员文章站
2022-05-13 22:02:38
...
windows 平台 (vs2017)
-
安装protobuf
- 首先安装cmake
CMake:https://cmake.org/download/ - 下载protobuf的C++版本的源代码
https://github.com/google/protobuf/releases
下载 protobuf-cpp-3.5.1.zip 这个包 - 解压源码 (路径不要带中文)
- 使用cmake 生成 vs2017 工程
稍等片刻
- 进入生成的 vs2017 工程目录 然后用vs2017 打开项目
- F7 等待漫长的编译。。。
- 编译完成 生成的文件 在 vs2017工程目录/Debug 目录下
- 首先安装cmake
- 使用protobuf
- 随便建一个vs2017 测试工程 这个不是重点 。。
- 修改配置 (这个很重要 )
1,修改预处理器定义:
项目属性->c/c++ -> 预处理器 -> 预处理器定义 添加这个PROTOBUF_USE_DLLS;
宏定义
2, 添加包含目录 库目录 这个简单 添加protobuf源码 src 目录 和刚刚生成的 debug目录 。看图
3,添加依赖项
添加libprotocd.lib; libprotobufd.lib
- 编译protobuf 的 .protobuf 文件
使用 debug目录下生成的 protoc.exeprotoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
注意空格,上述参数-I为源目录(你的应用程序源代码位于哪里——如果你没有提供任何值,将使用当前目录)、目标目录(你想要生成的代码放在哪里;常与 $SRC_DIR 相同),以及你的 .proto 文件路径 - 具体怎么使用protobuf 的语法 这个不属于本篇的范围 可以看 https://blog.csdn.net/u011518120/article/details/54604615 这位大佬的文章 。
注:windows 平台主要是注意 因为项目默认使用的是 动态链接的方式 我之前踩坑就是用静态库去链接 ;其次是 采用静态链接的方式 需要 加一个 宏定义 也就是在 预处理器中加的那个 。
如果还有其他坑 ,最快的解决方式就是 对照源码中的测试项目 去对照他的配置
Ubutun 平台 x64
安装protobuf
这个简单 官方有给说明 https://github.com/google/protobuf/blob/master/src/README.md使用
主要是在使用protobuf 中 编译项目时遇到一些问题
下面给出 可以成功编译 含有 protobuf 项目的一段 makefile 参考
CXX_SOURCES=$(wildcard *.cpp)
CXX_SOURCES_PROTOBUF=$(wildcard *.cc)
CXX_OBJECTS=$(OBJ_DIR)/$(patsubst %.cpp,%.o,$(CXX_SOURCES))
CXX_OBJECTS_PROTOBUF=$(OBJ_DIR)/$(patsubst %.cc,%.o,$(CXX_SOURCES_PROTOBUF))
BIN_DIR=./bin
OBJ_DIR=./obj
all: $(CXX_OBJECTS) $(CXX_OBJECTS_PROTOBUF) #-lprotobuf
g++ -g -pthread -I/usr/local/include -L/usr/local/lib -std=gnu++11 $(CXX_OBJECTS) $(CXX_OBJECTS_PROTOBUF) -o IMServer.out
$(OBJ_DIR)/%.o: %.cpp
g++ -c -g $< -std=gnu++11 -o aaa@qq.com
$(OBJ_DIR)/%.o: %.cc
g++ -c -g $< -std=gnu++11 -o aaa@qq.com
主要是需要在链接的时候指定库目录 好吧 也没什么难度 。。。。
-
使用 (番外篇)
一定有同学注意到 vs2017 也可以开发 - 编译 - 调试 linux 项目了 ,没错 我就是用vs 在开发。
然后在编译这个项目时 遇到莫名奇妙的问题 。 当然是项目配置问题 。。 这里也贴一下配置的过程- 添加库依赖项
protobuf;
- 添加库目录
- 添加命令行选项
-pthread
主要问题还是配置库这里 其实套路都一样 。
- 添加库依赖项
本篇 完结!
上一篇: Java基础知识补充(一)
下一篇: Kotlin的第一行代码