TensorFlow

来源:互联网 发布:视频转换音乐软件 编辑:程序博客网 时间:2024/05/21 18:31

TensorFlow - 使用Protocol Buffers

flyfish
环境:Win7,VC
1根据定义格式文件生成C++的头文件和生成文件

E:\lib\protobuf\VS\Debug\protoc.exe

为了路径简化,将addressbook.proto拷贝到E:\test
执行命令
protoc -I=E:\test –cpp_out=E:\test E:\test\addressbook.proto

生成两个文件 addressbook.pb.h 和addressbook.pb.cc

2 新建项目配置

新建一个win32的控制台程序

将两个文件 addressbook.pb.h 和addressbook.pb.cc加入到项目中

项目配置如下
这里写图片描述

这里写图片描述

这里写图片描述
因为该项目是使用dll的所以在

#include "stdafx.h"文件中添加如下代码#define PROTOBUF_USE_DLLS

因为使用预编译头文件所以
将此句代码#include “stdafx.h” 加入到addressbook.pb.cc的顶部

代码示例

#include "stdafx.h"#include <iostream>#include <fstream>#include <string>#include "addressbook.pb.h"using namespace std;// This function fills in a Person message based on user input.void PromptForAddress(tutorial::Person* person) {    cout << "Enter person ID number: ";    int id;    cin >> id;    person->set_id(id);    cin.ignore(256, '\n');    cout << "Enter name: ";    getline(cin, *person->mutable_name());    cout << "Enter email address (blank for none): ";    string email;    getline(cin, email);    if (!email.empty()) {        person->set_email(email);    }    while (true) {        cout << "Enter a phone number (or leave blank to finish): ";        string number;        getline(cin, number);        if (number.empty()) {            break;        }        tutorial::Person::PhoneNumber* phone_number = person->add_phones();        phone_number->set_number(number);        cout << "Is this a mobile, home, or work phone? ";        string type;        getline(cin, type);        if (type == "mobile") {            phone_number->set_type(tutorial::Person::MOBILE);        }        else if (type == "home") {            phone_number->set_type(tutorial::Person::HOME);        }        else if (type == "work") {            phone_number->set_type(tutorial::Person::WORK);        }        else {            cout << "Unknown phone type.  Using default." << endl;        }    }}// Main function:  Reads the entire address book from a file,//   adds one person based on user input, then writes it back out to the same//   file.int main(int argc, char* argv[]) {    // Verify that the version of the library that we linked against is    // compatible with the version of the headers we compiled against.    GOOGLE_PROTOBUF_VERIFY_VERSION;    if (argc != 2) {        cerr << "Usage:  " << argv[0] << " ADDRESS_BOOK_FILE" << endl;        return -1;    }    tutorial::AddressBook address_book;    {        // Read the existing address book.        fstream input(argv[1], ios::in | ios::binary);        if (!input) {            cout << argv[1] << ": File not found.  Creating a new file." << endl;        }        else if (!address_book.ParseFromIstream(&input)) {            cerr << "Failed to parse address book." << endl;            return -1;        }    }    // Add an address.    PromptForAddress(address_book.add_people());    {        // Write the new address book back to disk.        fstream output(argv[1], ios::out | ios::trunc | ios::binary);        if (!address_book.SerializeToOstream(&output)) {            cerr << "Failed to write address book." << endl;            return -1;        }    }    // Optional:  Delete all global objects allocated by libprotobuf.    google::protobuf::ShutdownProtobufLibrary();    return 0;}

3 生成exe之后
需要将libprotobufd.dll和libprotocd.dll 加入到与exe文件同一目录

这里写图片描述