从二进制文件中删除 protobuf C++ 编译的路径字符串

2024-01-18

当我编译使用 Protobuf 的 C++ 程序,然后运行 ​​linux 时strings二进制文件上的命令,其中一个字符串是生成的路径cc文件,包含我的主目录和所有内容。显然,我想从二进制文件中删除我的主目录和其他个人信息。

该路径从何而来以及如何防止它进入编译的二进制文件?


该字符串来自嵌入式 protobuf 描述符,用于执行 protobuf 类型的动态自省。本质上,描述符描述了你的整个.proto文件。描述符本身以protobuf格式编码;看谷歌/protobuf/descriptor.proto https://code.google.com/p/protobuf/source/browse/trunk/src/google/protobuf/descriptor.proto.

现在,描述符通常应该not包含您所描述的绝对路径。它确实想要包含“规范”路径——即原始文件相对于源代码根的路径名,或者换句话说,您在import该文件的声明。例如,descriptor.proto自己的规范路径是google/protobuf/descirptor.proto;要导入它,你会写import "google/protobuf/descriptor.proto";.

您的描述符获取完整绝对文件系统路径的原因是因为这是您要传递到的路径protoc,并且你没有通过-I旗帜告诉protoc源树的根在哪里。自从protoc无法找出源代码的根,它正在回退到文件系统根。

例如,说你的.proto文件是/home/foo/myproj/src/frobber/baz.proto。说src该路径中的目录是您的“源根目录”,这意味着您希望人们编写import "frobber/baz.proto";导入您的原型文件。在这种情况下,您想要调用protoc像这样:

protoc -I/home/foo/myproj/src /home/foo/myproj/src/frobber/baz.proto

请注意,如果您从以下位置运行命令myproj目录,那么您可能根本不应该指定绝对路径:

protoc -Isrc src/frobber/baz.proto

非常重要的是-I这里的flag是源文件名的文本前缀。protoc很笨,只知道如何比较字符串。例如,它不知道当前目录是什么:

# DOES NOT WORK
cd /home/foo/myproj
protoc -I/home/foo/myproj/src src/frobber/baz.proto

而且它也不能规范化“..”:

# DOES NOT WORK: protoc doesn't collapse "xyz/../".
protoc -Isrc xyz/../src/frobber/baz.proto

然而,如果“..”一致的话就可以了,因为同样protoc只关心前缀匹配:

# OK: Prefix is consistent.
protoc -Ixyz/../src xyz/../src/frobber/baz.proto

如果您不想有描述符

您可以通过将以下行放在您的文件中以“精简模式”编译您的原型文件.proto file:

option optimize_for = LITE_RUNTIME;

在此模式下,根本不会包含描述符。此外,您可以链接到 protobuf 运行时库的“lite”版本,该版本比常规版本小得多。但是,许多有用的功能将被禁用。整个反射界面将消失,任何依赖于反射的东西也将消失。例如,TextFormat,这就是DebugString()用于将消息转换为文本以打印以进行调试的方法将被删除,因此调试将变得更加困难。

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

从二进制文件中删除 protobuf C++ 编译的路径字符串 的相关文章

  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 阅读 Stack Overflow RSS 源

    我正在尝试获取未回答问题的列表the feed https stackoverflow com feeds 但我在阅读时遇到困难 const string RECENT QUESTIONS https stackoverflow com f
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015

随机推荐

  • Vim:删除光标周围的空行

    假设我正在编辑以下文档 光标 Lions Tigers Kittens Puppies Humans 我可以使用什么顺序删除周围的空白 以便留下 Lions Tigers Kittens Puppies Humans 注意 我正在寻找一个可
  • 用于发送电子邮件的正确 HTTP 动词

    对于仅让服务器发送电子邮件而不改变整个 Web 应用程序状态的请求 正确的 http 动词是什么 我正在开发一个 Rails 项目 我需要以某种方式定义路线 Rails application routes draw do get self
  • PyQt5 制作子类小部件

    所以我想知道如何制作小部件的子类 例如 如果我想创建一个小部件 它继承了 QtWidgets QPushButton 的方法和属性 但是我会在此基础上创建额外的方法和属性 class Coord QtWidgets QPushButton
  • java模块可以调用c模块吗?

    只是出于兴趣 是否可以从 java 模块调用 C 模块 如果是这样 该怎么办 是的 你可以使用Java 本机接口 http java sun com j2se 1 3 docs guide jni 去做这个
  • PL/SQL:是否有完全停止脚本执行的指令?

    我试图在 PL SQL 脚本的开头对数据库模式进行一些检查 如果检查给出不成功的结果 我想停止脚本 以防止执行下一条指令 我有这样的东西 1st line of PL SQL script DECLARE SOME COUNT INTEGE
  • 为什么算术运算符的参数类型默认为 int?

    我是 F 新手 我惊讶地发现f x y x y实际上是int gt int gt int 显然 https stackoverflow com questions 501069 functions with generic paramete
  • Delphi:“TObject 数组”类型参数上的 SetLength()

    我正在尝试调整作为参数传递的某个类的数组的大小 例如 procedure Resize MyArray Array of TObject begin SetLength MyArray 100 end 但是 这会引发错误 E2008 不兼容
  • 如何阻止异步 tcp .NET 代码耗尽整个系统的资源

    在我的一些异步 TCP 服务器代码中 偶尔会发生错误 导致进程消耗整个系统的内存 在查看日志 事件查看器和一些MS docs http support microsoft com kb 947862如果 调用应用程序多次对同一客户端进行异步
  • 设置 TCP/IP 客户端和服务器通过网络进行通信

    我正在尝试学习一些有关套接字编程的知识 并且偶然发现了 TcpListener 和 TcpClient 来使用 因为我读到它们对于初学者来说稍微容易一些 我想要完成的基本要点是拥有一个可以在我的笔记本电脑和同一网络上的另一台笔记本电脑上运行
  • 对 pandas 数据框进行子集化的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 嘿 我是 Pandas 新手 我刚刚遇到df query 为什么人们会使用df query 什么时候可以使用括号表示法直接过滤数据框 panda
  • 如何在 JavaScript 中添加 HTML 标签?

    我想在我的 javascript 中使用一个 html 标签 但不知道如何使用它 For ex p An absolute URL a href https www w3schools com W3Schools a p 这是我的标签 我想
  • 如何使用 C++ 发出 HTTP 请求?

    有没有办法用C 轻松发出HTTP请求 具体来说 我想下载一个页面 API 的内容并检查内容是否包含1或0 是否也可以将内容下载到字符串中 我有同样的问题 libcurl http curl haxx se libcurl 真的很完整 有一个
  • DetectionAPI 仅支持单声道 Wav

    我正在开发一个拍手检测 Android 应用程序 我在用musicg https github com madyx musicgapi 用于此 我从github导入了该项目并在android设备上运行 然后这个错误显示 DetectionA
  • Memcache 错误:无法从流 (0) 数组读取行

    当我们的服务器承受任何重大负载时 我会收到以下错误的一些变化 我已经在谷歌上搜索了几个小时并尝试了一切 包括升级到最新版本和全新安装 我已经阅读了 SA 上所有关于它的帖子 但无法弄清楚 很多人都有同样的问题 但似乎没有人有明确的答案 任何
  • Ga特林 j.n.ConnectException:地址已在使用中

    当使用 Ga特林运行模拟时 我遇到以下异常 j n ConnectException 地址已在使用中 没有更多信息 当测试的服务器无法响应或超时时是否会发生这种情况 我想确保这是服务器抛出的异常 而不是客户端抛出的异常 我在 Windows
  • AWS 负载均衡器连接到同一服务器上的多个端口,无需 PAT

    我有一个 EC2 Web 服务器 它提供一个侦听端口 80 8080 443 和 8443 的应用程序 外部客户端需要在这些端口上与其通信 无端口转换 我试图将其放在负载平衡器后面 但过多的所需端口让我感到困惑 我有一个 ALB 监听 4
  • 当 NFS 挂载失败时,bash 检查目录是否存在挂起

    我有一个 bash profile 脚本 它根据目录存在为我设置一些别名 if d home user games then alias cdgames cd home user games fi 这些目录之一位于 NFS 挂载上 如果文件
  • 如何在 JSON Schema 中制作二维数组?

    下面的二维数组怎么写JSON 架构 http json schema org 网格固定为16 13 它包含完全空的行或具有 int 0 99 或空字符串等值的行 这是数组的示例 94 78 37 78 61 71 42 82 53 62 6
  • PyObjC + Xcode 3.2 + 非 Apple Python

    我想开始尝试使用 PyObjC 开发一些简单的应用程序 我安装了 PyObjC 和 Xcode 模板 我知道 PyObjC 本身可以工作 因为我已经运行了这个脚本 http svn picidae net trunk pici server
  • 从二进制文件中删除 protobuf C++ 编译的路径字符串

    当我编译使用 Protobuf 的 C 程序 然后运行 linux 时strings二进制文件上的命令 其中一个字符串是生成的路径cc文件 包含我的主目录和所有内容 显然 我想从二进制文件中删除我的主目录和其他个人信息 该路径从何而来以及如