问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现protobuf在XCODE上armv7/armv7s/i386的交叉编译

发布网友 发布时间:2022-04-24 22:48

我来回答

1个回答

热心网友 时间:2022-04-10 08:37

  步骤一:部署protoc.exe

  1)sudo su ---进入管理模式

  //以下操作切换至protobuf文件夹下

  2)./configure

  3)make

  4)make check

  5)make install

  此时可以查看protobuf文件夹下面的makefile文件,可以查看-build表示的本机环境以及-host表示的编译库的运行环境

  我本地的-build=x86_64-apple-darwin12.3.0

  -host=x86_64-apple-darwin12.3.0

  (这两个参数在后续配置脚本需要用到,与后面脚步的i686-apple-darwin12.3.0以及arm-apple-darwin12.3.0后缀“arm-apple-darwin12.3.0”保持一致)

  6)make distclean清理已生成的makefile,为交叉编译配置新makefile做准备

  步骤二:配置交叉编译

  1)执行脚本ios-build.sh,脚本内容如下:

  configure_for_platform() {

  export PLATFORM=$1

  #export PLATFORM=iPhoneOS

  echo "Platform is ${PLATFORM}"

  if [ "$PLATFORM" == "iPhoneSimulator" ]; then

  export ARCHITECTURE=i386

  export ARCH=i686-apple-darwin12.3.0

  fi

  if [ "$PLATFORM" == "iPhoneOS" ]; then

  export ARCHITECTURE=$2

  export ARCH=arm-apple-darwin12.3.0

  fi

  export ARCH_PREFIX=$ARCH-

  export SDKVER="6.1"
#sdk版本号必须正确

  export
DEVROOT=/Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.platform/Developer

  export SDKROOT="$DEVROOT/SDKs/${PLATFORM}$SDKVER.sdk"

  export
PKG_CONFIG_PATH="$SDKROOT/usr/lib/pkgconfig:$DEVROOT/usr/lib/pkgconfig"

  export AS="$DEVROOT/usr/bin/as"

  export ASCPP="$DEVROOT/usr/bin/as"

  export AR="$DEVROOT/usr/bin/ar"

  export RANLIB="$DEVROOT/usr/bin/ranlib"

  #export CPP="$DEVROOT/usr/bin/c++"

  #export CXXCPP="$DEVROOT/usr/bin/c++"

  export CC="$DEVROOT/usr/bin/gcc"

  export CXX="$DEVROOT/usr/bin/g++"

  export LD="$DEVROOT/usr/bin/ld"

  export STRIP="$DEVROOT/usr/bin/strip"

  export LIBRARY_PATH="$SDKROOT/usr/lib"

  export CPPFLAGS=""

  #export CFLAGS="-arch armv7 -fmessage-length=0 -pipe -fpascal-strings
-miphoneos-version-min=4.0 -isysroot=$SDKROOT -I$SDKROOT/usr/include
-I$SDKROOT/usr/include/c++/4.2.1/"

  export CFLAGS="-arch ${ARCHITECTURE} -fmessage-length=0 -pipe
-fpascal-strings -miphoneos-version-min=4.0 -isysroot=$SDKROOT
-I$SDKROOT/usr/include -I$SDKROOT/usr/include/c++/4.2.1/"

  export CXXFLAGS="$CFLAGS"

  #export LDFLAGS="-isysroot='$SDKROOT' -L$SDKROOT/usr/lib/system
-L$SDKROOT/usr/lib/"

  export LDFLAGS="-arch ${ARCHITECTURE} -isysroot='$SDKROOT'
-L$SDKROOT/usr/lib/system -L$SDKROOT/usr/lib/"

  ./configure --host=${ARCH} --with-protoc=protoc --enable-static
--disable-shared

  }

  mkdir ios-build

  #build for iPhoneSimulator

  configure_for_platform iPhoneSimulator

  make clean

  make

  cp src/.libs/libprotobuf-lite.a ios-build/libprotobuf-lite-i386.a

  #提取完整版本(i386)

  cp src/.libs/libprotobuf.a ios-build/libprotobuf-i386.a

  #build for iPhoneOS armv7

  configure_for_platform iPhoneOS armv7

  make clean

  make

  cp src/.libs/libprotobuf-lite.a ios-build/libprotobuf-lite-armv7.a

  #提取完整版本(armv7)

  cp src/.libs/libprotobuf.a ios-build/libprotobuf-armv7.a

  #build for iPhoneOS armv7s

  configure_for_platform iPhoneOS armv7s

  make clean

  make

  cp src/.libs/libprotobuf-lite.a ios-build/libprotobuf-lite-armv7s.a

  #提取完整版本(armv7s)

  cp src/.libs/libprotobuf.a ios-build/libprotobuf-armv7s.a

  make clean

  #cerate a fat library containing all achitectures in libprotobuf-lite.a

  xcrun -sdk iphoneos lipo -arch armv7 ios-build/libprotobuf-lite-armv7.a -arch
armv7s ios-build/libprotobuf-lite-armv7s.a -arch i386
ios-build/libprotobuf-lite-i386.a -create -output
ios-build/libprotobuf-lite.a

  #合并三个完整版本(libprotobuf.a)

  xcrun -sdk iphoneos lipo -arch armv7 ios-build/libprotobuf-armv7.a -arch
armv7s ios-build/libprotobuf-armv7s.a -arch i386 ios-build/libprotobuf-i386.a
-create -output ios-build/libprotobuf.a

  2)将打包生成的libprotobuf-lite.a和libprotobuf.a复制至工程下进行编译,可以编译protobuf在xcode上的模拟器版本和真机版本,完成交叉编译。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? 想申请一张广发银行信用卡,申请条件都有哪些呢 广发银行的信用卡具体申请流程是怎么样的?可以分享一下吗? 如何解iOS系统中系统库的dyld缓存 ios打包测试我需要怎么选择打包要修改debug的状态吗 申请广发信用卡需提供什么资料 如何适配Arm64架构的 iosAPP-IOS 怎么申请广发样样行? 手机CPU中基于ARM构架设计CPU的“海思”,基于ARMv7-A指令集自行设计CPU... 广发银行信用卡申请办理需要多久 oc怎么获取ios设备的cpu架构 广发信用卡的申请流程是什么啊? ios中怎么将muPDF编译成framwork,能支持armv7,arm64,armv7s? 如何申请广发银行的信用卡? ios 系统自带方法与第三方方法相冲突怎么处理 如何实现protobuf在XCODE上armv7/armv7s/i386的交叉编译 / 蓝讯 广发信用卡怎么申请办理信用卡 怎么查ios app中的.a库支持arm iOS开发之:ios设备中,armv6/armv7/armv7s架构的机器各有哪些? 我朋友有一个清明上河图第十卷十字绣纯手工的1米成2米的值12万吗 纯手工淮山薏米糕的做法 我们申请广发信用卡需要哪些条件? ios 如何通过内存地址找到相关代码 广发信用卡申请需要什么条件?要怎么申请? 现在上传appstore 要支持armv7s吗 Xcode的Architectures和Valid Architectures的区别 64bit编译 ios 能编译动态库吗 广发银行申请广发卡和电子帐户是什么意思 如何编译OpenCV进行IOS7 我朋友要到银行贷款300万,要我做中间担保人,我想知道做中间担保人都需要什么条件呀,需要我手里有3? 银行贷款三年期为什么中间还要每年还一次是什么意思 找重庆银行贷款中间有个中介公司合理吗 银行贷款中间业务 贷款的中间商收费上限是多少? 中国人保的客服电话 银行贷款被中间人抽8个点合法吗? 向银行贷款,中间人承担什么责任 人保财险的客服电话是多少 银行贷款中间还了一部分还需要全部付利息吗 中国人保公司客服电话 我申请了一个银行贷款中间人要抽百分子二十合法吗?