mac下编译protobuf c++

2023-10-27

由于protobuf官网的文档是英文版的,并且并没有比较详细的说明(可能说得很清楚了,只是我这种英文渣看不懂),学习起来着实费了一翻功夫。

在此,记录一下学习过程,希望尽量详细。

一、编译过程需要的工具

1.protobuf源码,下载地址:https://github.com/google/protobuf/releases,看自己要先哪个版本,就选择对应的Source code,可以选择zip或者tar.gz格式。

2.g++(注意,一定是g++,gcc在链接c++的库时有时候是链接不到的),这个mac自带有,不用下载或者安装。

二、编译protobuf库

1.解压下载下来的protobuf文件,选一个比较幸运的文件夹(会增加你编译成功的概率哦,玩笑话:随便选啦)。

2.打开终端,cd到你解压出来的protobuf文件夹根目录(如:我下载的压缩包是3.2.0版本 解压出来会是protobuf-3.2.0,cd 你的目录/protobuf-3.2.0)。

3.依次执行下面的命令:

./autogen.sh

./configure

make

maek check

sudo make install

到此,编译步骤完毕。

上面的命令会把protobuf头文件放在/usr/local/include里的google文件夹;

protobuf库文件放在/usr/local/lib文件夹。

三、把test.proto文件编译成c++用的test.pb.cc和test.pb.h文件

编译test.proto文件有两个方式:

1.上面的几个命令已经把编译xxx.proto需要的脚本(protoc)放在了/usr/local/bin里,可以直接使用了;

2.在https://github.com/google/protobuf/releases里,我们选的Source code的同一个版本里有protobuf-版本号-osx-86_64.zip,下载解压,里面有个bin文件夹,里面的protoc和1里的protoc是一样的。

个人用的是第二种。

把编写好的test.proto文件移到这个bin文件夹里,和protoc同级。

test.proto文件。

syntax = "proto3";

message Test {
    string name = 1;
    int32 age = 2;
}


打开终端,cd到bin文件夹里,执行以下命令:

./protoc -I=./ --cpp_out=./ ./test.proto

注意,一定要是./protoc,如果是protoc会执行/usr/local/bin里的protoc,这样的话,如果你有其他版本的protobuf,就只会执行/usr/local/bin里的protoc,可能跟你想要的版本不一样。

三、写测试例子查看成果

1.新建test文件夹,在test文件夹里编写test.cpp文件

#include "stdio.h"
#include "test.pb.h"
int main()
{
	Test *test = new Test();
	test->set_name("123");
	test->set_age(12345);
	printf("test  !!!!!\n");
	return 0;
}
2.把刚刚编译出来的test.pb.cc和test.pb.h放在与test.cpp同级目录下

3.打开终端,cd到test目录下,执行g++ -o test test.cpp test.pb.cc -I /usr/local/include -L /usr/local/lib -lprotobuf,

生成test文件,执行test命令

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mac下编译protobuf c++ 的相关文章

  • 谁能建议我一种在 C++ 中分割名称的简单方法

    我一直在尝试将名称分为名字和姓氏 但我确信我的实现就简单性而言并不是最好的 string name John Smith string first string last name name find getting lastname fo
  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 通过 SocketCAN 进行 boost::asio

    我正在考虑利用升压阿西奥 http www boost org doc libs 1 49 0 doc html boost asio html从a读取数据套接字CAN http en wikipedia org wiki SocketCA
  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft

随机推荐

  • Unity核心6——Animation

    一 动画窗口 通过 Window gt Animation gt Animation 打开 Animation 窗口 Animation窗口主要用于在 Unity 内部创建和修改动画 所有在场景中的对象都可以通过 Animation 窗口为
  • Latex的一些操作

    ps 最近投个论文 需要Latex排版 于是简单使用一下 记录一些基本步骤 以防备用 一 下载与安装工具 texlive的下载与安装 参见这个网友写的 https blog csdn net weixin 39892850 article
  • DeepJavaLibrary(DJL)框架的使用:在java上使用AlphaPose完成实时多人姿态估计任务

    首先 这里是完整的项目代码 目录 实现环境 实现原理 DJL框架能帮我们做什么 Alphapose 实现步骤 一 导出alphapose模型 导出yolov5 导出单人姿态估计网络 二 实现Translator 使用YoloTranslat
  • Java类的加载机制

    一 类的生命周期 1 加载的生命周期 类从被加载到虚拟机内存中开始 到卸载出内存为止 它的整个生命周期包括 加载 Loading 验证 Verification 准备 Preparation 解析 Resolution 初始化 Intial
  • URP源码学习(七)一些细节和理解

    RT理解 RT是什么 用在哪 首先rt是一张特殊贴图 这张贴图对应的是GPU上的FrameBuffer 一般用到的是颜色和深度 从这张图取数据用于计算 或是直接对这张图进行修改 以得到想要的效果 FrameBuffer就是gpu里渲染结果的
  • 【论文阅读-NeurIPS-2019】Coda: An End-to-End Neural Program Decompiler

    Coda An End to End Neural Program Decompiler Conference NeurIPS 2019 这篇文章提出了一个新的反编译框架Coda 分为code sketch generation 和 err
  • Appium连接手机时报权限错误 requires:android.permission.WRITE_SECURE_SETTINGS

    报错信息 java lang SecurityException Permission denial writing to settings requires android permission WRITE SECURE SETTINGS
  • ubuntu server 22.04 静态ip设置

    ubuntu server 22 04 静态ip设置 我一般配置ip都是在系统安装完成后才进行设置 查看当前网络 需要了解的是 你该静态ip是该的哪个网卡的别搞错了 ifconfig ip a 这两个命令 都是可以的 修改配置文件 etc
  • C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据 使用的是基于以太网的TCP IP实现 不需要额外的组件 读取操作只要放到后台线程就不会卡死线程 本组件支持超级方便的高性能读写操作 官方地址 http www hslcommu
  • 关于java.servlet.*缺失问题

    上图使用的tomcat版本为10 0 23 此问题目前出现在Tomcat10系列 而 Javax servlet 标红 不存在 的原因是因为包名改了 Tomcat 10 用以下的 import import jakarta servlet
  • ESP12f/E(8266)以及STM32串口自动烧录电路

    在使用CH340C芯片进行自动烧录时 经常会用到RTS和DTR两个联络输出信号 电脑烧录程序控制芯片这两个引脚的高低电平 从而控制主控芯片IO0和reset引脚进行自动烧录并复位 这两个信号都是低电平有效 STM32 这里需要注意的是使用的
  • jpa报错:check the manual that corresponds to your MySQL server version for the right

    原因一 check the manual that corresponds to your MySQL server version for the right 因为表字段中使用了关键字 private String describe 解决
  • 查看tensor的形状,行列大小

    torch size是tuple 元组的子类 因此他支持元组所有的操作 如x size 0 import pandas as pd import numpy as np import torch x torch rand 5 3 print
  • 基于内容的课程推荐系统

    引言 基于Coursera课程数据集 将课程名称向量化 计算与目标课程标题向量最相似的课程向量 实现基于内容的课程推荐 代码实现 准备实验环境与数据 import numpy as np import pandas as pd from s
  • SHELL学习笔记----IF条件判断,判断条件

    前言 无论什么编程语言都离不开条件判断 SHELL也不例外 if list then do something here elif list then do another thing here else do something else
  • docker容器服务无法访问题解决

    问题现象 前不久通过docker启动的容器服务均无法访问 开始以为容器坏了 也不着急使用就没当回事 最近这几天需要部署监控服务 容器启动后浏览器访问一直提示网络连接错误 并且在启动容器时有以下提示 WARNING IPv4 forwardi
  • Java基础--- 抽象方法和类 Abstract Methods and Class

    Java基础 抽象方法和类 Abstract Methods and Class 抽象方法 Abstract Method 抽象类 Abstract Class 关于抽象类不能被实列化 使用new operator 抽象方法 Abstrac
  • 计算机是学前端开发好还是后端开发好?

    学前端还是学后端 这是个好问题 很多人问 在我看来 它可能是个伪命题 既然题主问的是前后端 那我默认你问的是网站开发的问题 这是我们很长一段时间里对于网站开发工程师的分工 那么我们来看传统意义上 前后端是如何分工的 后端工程师负责渲染出基础
  • sql server 存储过程中输入参数需要用in而失效的问题解决方案

    在存储过程中使用IN函数 传入多个参数时 会有问题 因为输入参数 1 2 3 是一个数据 而不是一个集合 导致sql失效 三种解决方案 1 建立函数分割输入参数里面的 create FUNCTION dbo Split2 RowData v
  • mac下编译protobuf c++

    由于protobuf官网的文档是英文版的 并且并没有比较详细的说明 可能说得很清楚了 只是我这种英文渣看不懂 学习起来着实费了一翻功夫 在此 记录一下学习过程 希望尽量详细 一 编译过程需要的工具 1 protobuf源码 下载地址 htt