linux protobuf静态库,Mac下交叉编译protobuffer版本库(C++版)

一.前言

这几天和开发jni的同学对接SDK,其中包含了protobuffer和openssl库,这里主要说一下protobuffer编译mac环境静态库过程及遇到的问题,在此记录下来供后续参考,由于对linux及英文不是很熟,过程中也感谢生才同学的协助!

当拿到jni的时候,处理了header search path路径问题后,又出现了另一个报错,一脸懵逼!

c4f4d1e0a498

其实是由于libprotobuf-lite.a静态库不符合我们当下的arm64  arm64e  x86_64  armv7 等环境,所以需要重新编译一个符合mac系统环境下的静态库。

其实在我们开发过程中也可以用命令来校验当前库的符合的环境,

格式是:lipo -info 要检验的库路径

例:lipo -info /Users/zhaoyonghong/Desktop/openssl/lib/libssl.a

执行结果如下:

(如果不符合的话,会提示没有找到对应编译环境,这时候就需要重新编译库了)

c4f4d1e0a498

(如果符合,会将对应的环境显示出来)

c4f4d1e0a498

二.具体步骤

首先选择对应版本下载protobuffer源码,我们用的是 protobuf-3.6.1,mac下安装C++版本的博客网上极少存在,有的也真的没有一个合适。下面列出过程中需要用到的命令:

1.检查是否安装

protoc --version

2.clone源码

3.下载你想要的版本

git checkout v3.10.1

4.下载以后cd到目录下后执行

./autogen.sh

5.创建环境变量

build_dir=`pwd`/../libprotobuf/ios

darwin=darwin`uname -r`

protoc=`which protoc`

isysroot=`xcrun --sdk iphoneos --show-sdk-path`

cflags="-Wno-unused-local-typedef -Wno-unused-function -DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions"

cxxflags="$cflags -std=c++11 -stdlib=libc++"

6.创建输出目录

mkdir -p $build_dir/arch

mkdir -p $build_dir/lib

7.配置64位生成环境

./configure \

--build=x86_64-apple-$darwin \

--host=arm \

--with-protoc=$protoc \

--disable-shared \

--prefix=$build_dir \

--exec-prefix=$build_dir/arch/arm64 \

"CC=clang" \

"CFLAGS=$cflags -miphoneos-version-min=8.0 -arch arm64 -isysroot $isysroot" \

"CXX=clang" \

"CXXFLAGS=$cxxflags -miphoneos-version-min=8.0 -arch arm64 -isysroot $isysroot" \

LDFLAGS="-arch arm64 -miphoneos-version-min=8.0 -stdlib=libc++" \

"LIBS=-lc++ -lc++abi"

8.构建64位库

make -j8

make install

9.清除协议缓冲区目录

make distclean

10.配置32位库生成环境

./configure \

--build=x86_64-apple-$darwin \

--host=armv7-apple-$darwin \

--with-protoc=$protoc \

--disable-shared \

--prefix=$build_dir \

--exec-prefix=$build_dir/arch/armv7 \

"CC=clang" \

"CFLAGS=$cflags -miphoneos-version-min=8.0 -arch armv7 -isysroot $isysroot" \

"CXX=clang" \

"CXXFLAGS=$cxxflags -miphoneos-version-min=8.0 -arch armv7 -isysroot $isysroot" \

LDFLAGS="-arch armv7 -miphoneos-version-min=8.0 -stdlib=libc++" \

"LIBS=-lc++ -lc++abi"

11.构建32位库

make -j8

make install

12.编译对应两个文件a

lipo \

$build_dir/arch/arm64/lib/libprotobuf-lite.a \

$build_dir/arch/armv7/lib/libprotobuf-lite.a \

-create \

-output $build_dir/lib/libprotobuf-lite.a

13.删除未使用的库

rm -rf $build_dir/arch

14.到此静态库生成完毕,在protobuf中包含两个文件,分别是include和lib,导入到自己的工程就可以愉快的撸代码了

proto

├── cardboard_device.pb.cc

├── cardboard_device.pb.h

└── libprotobuf

└── ios

├── include

│   └── google/*

└── lib

└── libprotobuf-lite.a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值