栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

arm64交叉编译protobuf 3.12.0

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

arm64交叉编译protobuf 3.12.0

目录

   

1.源码下载

2.编译步骤

3.验证 & 测试


   

1.源码下载

1.源码下载

github下载源码 GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format

2.编译步骤

 ./autogen.sh
如果出错的话 apt-get install这些:
autoconf
automake
ibtool
make
g++
unzip

 交叉编译的话

     PATH 是你工具链所在的路径
$ ./configure --host=arm-linux CC=/PATH/aarch64-linux-gnu-gcc CXX=/PATH/aarch64-linux-gnu-g++ --prefix=/home/protobuf/install
$ make -j;make install

3.验证 & 测试
在/home/protobuf/install   下有 bin  include  lib  三个文件夹  分别表示 可执行文件、头文件、生成的库

cd home/protobuf/install 
cd bin
protoc --version   //查看 protoc是不是arm64 版本  如果是交叉编译成功  但是得测试一下

测试用例

helloworld.proto

syntax = "proto3";
 
package lm; 
message helloworld 
{ 
    int32     id = 1;  // ID 
    string    str = 2;  // str 
}

person.proto

syntax="proto3";
package tutorial;
 
message Person
{
	string name = 1;
	int32 id = 2;
	string email = 3;
 
	enum PhoneType
	{
		MOBILE = 0;
		HOME = 1;
		WORK = 2;
	}
 
	message PhoneNumber
	{
		string number = 1;
		PhoneType type = 2; 
	}
 
	repeated PhoneNumber phone = 4;
}
 
message AddressBook
{
	repeated Person person =1;
}

protoc -I=./ --cpp_out=./ helloworld.proto
protoc -I=./ --cpp_out=./ person.proto

会自动生成文件:

helloworld.pb.h

helloworld.pb.cc

person.pb.h

person.pb.cc

 

CMakeLists.txt        (参考的 暂不明确此处用处)

cmake_minimum_required(VERSION 2.8)
 
project(pbtest)
 
#set(SRC .)
#查找当前目录下的所有源文件,并将名称保存到DIR_SRCS变量
aux_source_directory(. DIR_SRCS)
 
add_executable(${PROJECT_NAME} ${DIR_SRCS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} protobuf)


 

main.cpp

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "helloworld.pb.h"
 
using namespace std;
#define BUFFSIZE 1024
 
int main()
{
    GOOGLE_PROTOBUF_VERIFY_VERSION;
 
    //eg1, write file
    lm::helloworld msg1;
    msg1.set_id(1001);
    msg1.set_str("hello world");
 
    fstream output("./log", ios::out | ios::trunc | ios::binary);
    if (!msg1.SerializeToOstream(&output)) {
        cerr << "Failed to write msg." << endl;
        return -1;
    }
 
    output.close();
    cout << msg1.id() << endl;
    cout << msg1.str() << endl;
 
    //eg2, read file
    lm::helloworld msg2;
    fstream input("./log", ios::in | ios::binary);
    if (!input)
    {
        cerr << "open file failed!n";
        return -1;
    }
 
    if (!msg2.ParseFromIstream(&input)) {
        cerr << "Parse file failed!" << endl;
        return -1;
    }
 
    input.close();
    cout << msg2.id() << endl;
    cout << msg2.str() << endl;
 
    //eg3, write buf, protobuf序列化
    lm::helloworld msg3;
    msg3.set_id(1002);
    msg3.set_str("good idea");
    char buf[BUFFSIZE];
    memset(buf, 0, BUFFSIZE);
    msg3.SerializeToArray(buf, BUFFSIZE);
 
    //eg4, read buf, protobuf反序列化
    lm::helloworld msg4;
    msg4.ParseFromArray(buf, BUFFSIZE);
    cout << msg4.id() << endl;
    cout << msg4.str() << endl;
 
    // Optional:  Delete all global objects allocated by libprotobuf.
    google::protobuf::ShutdownProtobufLibrary();
 
    return 0;
}

测试用例参考:我个人的protobuf-3.5.2实践:安装与测试_libaineu2004的博客-CSDN博客

​
生成测试的可执行文件:g++ -g -Wall -std=c++11 main.cpp helloworld.pb.cc person.pb.cc -L/home/protobuf/install/lib  -I/home/protobuf/install/include  -lprotobuf -lpthread


注意: 这是是交叉编译的 arm64  的可执行文件  在x86平台不可运行

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号