当前位置: 首页 > 知识库问答 >
问题:

如何编译Google Protobuf命令行界面编译

杜经艺
2023-03-14

我正在尝试对protobuf二进制文件进行原始解码。我从源代码中安装了google protobuf库https://github.com/google/protobuf我可以使用命令行来解码原始的protobuf二进制文件,使用命令protoc--decode_raw

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.compiler.command_line_interface

然而,尝试编译一段简单的代码是行不通的。

#include <iostream>
#include <fstream>
#include <string>
#include <google/protobuf/compiler/command_line_interface.h>
using namespace google::protobuf::compiler;
using namespace std;

int main(int argc, char* argv[]) {


    google::protobuf::compiler::CommandLineInterface cli_;
    cerr << "Compiled And Run" << endl;

}

编译命令

c++++  my_program.cc  -o my_program -pthread -I/usr/local/include  -pthread -L/usr/local/lib -lprotobuf -lpthread

我看到以下错误

my_program.cc:(.text+0x24): undefined reference to `google::protobuf::compiler::CommandLineInterface::CommandLineInterface()'
my_program.cc:(.text+0x4f): undefined reference to `google::protobuf::compiler::CommandLineInterface::~CommandLineInterface()'
my_program.cc:(.text+0x70): undefined reference to `google::protobuf::compiler::CommandLineInterface::~CommandLineInterface()'

感谢任何帮助。


共有1个答案

景建业
2023-03-14

Protobuf编译器位于另一个库中,libprotoc。你需要联系它

c++++  my_program.cc  -o my_program -pthread -I/usr/local/include  -pthread -L/usr/local/lib -lprotoc -lprotobuf -lpthread

请注意,-lprotoc需要出现在-lprotobuf之前,因为libprotoc使用libprotobuf的函数。

 类似资料:
  • 主要内容:SDKMAN!,创建和运行第一个程序,hello.kt,运行 REPL(交互式解释器),使用命令行执行脚本Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、

  • Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、Cygwin、F

  • 这些命令在用途和功能性方面与 C 预处理器很相似。它们都允许文件内含,条件编译,可执行的头部封包,以及在构建进程期间处理执行。注意:这些命令都不允许使用变量。 5.1.1 !include [/NONFATAL] 文件 这个命令可以将一个文件包含到脚本中,就像是脚本的一部分一样。请注意,如果一个文件包含在了另一个目录中,那么当前目录仍是编译脚本的地方 (不是要包含的文件所在的目录)。如果编译器无法

  • 但没有效果(全名为空)。 帮助中提到,只有在“常规设置->编译器变量”步骤中定义的变量才能像这样被重写。 这是否意味着我必须创建一个额外的“中间”编译器变量,并将其放在的全名字段中?

  • 我在IntelliJ中编译Maven项目时遇到了麻烦。 如果运行from commandline=success 如果单击intelj=success中的“重新导入所有Maven项目”图标 如果我单击IntelliJ=success中的“为所有项目生成源和更新文件夹”图标 如果我单击Maven Projects面板中的“install”Lifecycle=success 在Maven“安装”之后,

  • 问题内容: 如何在Mac和Linux上从命令行编译和上传Arduino 草图?我已经安装了Arduino编程环境。哪里有一些示例makefile? 问题答案: 从1.5.0开始,通过标志直接支持在arduino可执行文件上直接在命令行(在Windows,Mac和Linux上)编译和上传草图(与C / C ++源代码有关)。 一个ino可以被编译和上传 文献资料