美文网首页
Mac下交叉编译protobuffer版本库(C++版)

Mac下交叉编译protobuffer版本库(C++版)

作者: 赵永洪 | 来源:发表于2020-05-08 15:09 被阅读0次

    .前言

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

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

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

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

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

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

    执行结果如下:

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

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

    .具体步骤

    官方链接(需要翻墙):https://developers.google.com/cardboard/develop/ios/protobuf

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

    1.检查是否安装

     protoc --version

    2.clone源码

    git clone https://github.com/protocolbuffers/protobuf.git

    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

    相关文章

      网友评论

          本文标题:Mac下交叉编译protobuffer版本库(C++版)

          本文链接:https://www.haomeiwen.com/subject/lopfnhtx.html