2017-07-25 80 views
0

我想原始解碼protobuf二進制文件。我從源代碼安裝了谷歌protobuf庫https://github.com/google/protobuf 我能夠使用命令protoc --decode_raw <encodedfile>來使用命令行解碼原始protobuf二進制文件。我希望能夠使用C++庫以編程方式執行此操作。類似於文檔中以下示例的內容。如何編譯谷歌Protobuf命令行界面編譯

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()' 

欣賞任何幫助。

+0

您是否構建了protobuf庫?使用[此處]的步驟(https://github.com/google/protobuf/tree/master/src)。 – Steeve

回答

1

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的功能。