• 第44月第7天 bitcode 生成各机型的包


    1.

    使用开发模式导出ipa

    选择出包的方式,生成针对具体机型的包

    App Thinning:All compatible device variants

    http://www.cocoachina.com/articles/14432

    2.

    其中 libdemo.a 就是我们要检查的文件。一般第三方库都会发布 fat library 以支持各个 CPU 架构。
      接着,如果是 fat library,需要将某个 CPU 架构的 slice 提取出来:

    lipo -thin arm64 libdemo.a -output libdemo-arm64.a
    

      这样,我们就将 arm64 这个 slice 提取出来了。接下来我们需要将这个 slice 里面的目标文件解压出来,可以用 ar 命令:

    ar -x libdemo-arm64.a
    

      假设我们解压了 libdemo_la-util.o 这个目标文件。最后,我们检查目标文件中,是否包含 __bicode 这个段(segment):

    otool -l libdemo_la-util.o | grep bitcode


    https://www.jianshu.com/p/a8feea7b2834
     
     
    3.
     

    用Clang编译成 ARM64 格式且带bitcode的目标文件test.o demo.o:

    wuqiong:~ apple$ xcrun -sdk iphoneos clang -arch arm64 -fembed-bitcode -c test.m demo.m
    

    然后把两个目标文件打包为一个静态库文件:

    wuqiong:~ apple$ xcrun -sdk iphoneos ar  -r libTest.a test.o demo.o
    ar: creating archive libTest.a
    

    用Shell命令otool查看目标文件中是否包含bitcode段:

    wuqiong:~ apple$ otool -l test.o |grep bitcode
      sectname __bitcode
      sectname __bitcode
     

    很意外,这一次,只有一行sectname __bitcode输出,这就说明这两个目标文件,有一个不带有bitcode段,哪怕我们在编译的时候指定了参数-fembed-bitcode也没有用.至于具体是哪一个不带bitcode段,我们肯定知道就是那个从ARM64汇编语言编译过来的目标文件不带.

    那么就得出一个结论,bitcode的生成,是由汇编语言以上的上层语言编译而来,和最前面所说的那样,他是上层语言与汇编语言(机器语言)之间的一个中间码.

    目前我们日常的iOS应用开发中,一般不会需要用到汇编层面去优化的代码.所以我们主要关注第三方(开源)C代码,尤其是音视频编码解码这些计算密集型项目代码,关键计算的代码针对特定平台都有对应平台的汇编版本实现,当然也有C的实现,但是默认编译一般都是用的汇编版本,这样就会导致我们在编译这个开源代码的时候哪怕你带了-fembed-bitcode参数也仅仅只是让项目中的部分C代码的目标文件带了bitcode段,而那小数的汇编代码的目标文件一样不带bitcode段,这样编译出这个库交给上层开发者使用的时候,就会出现在打包上传或者真机调试的时候因为Xcode默认开了bitcode功能而链接失败,导致不能真机调试或者不能上传应用到AppStore.



    https://www.jianshu.com/p/f42a33f5eb61
     
  • 相关阅读:
    fastapi教程进阶
    fastapi快速入门
    Linux yum安装PostgreSQL9.6
    harbor helm仓库使用
    Dockfile文件解析
    K8S概念理解
    转载---Beats:如何使用Filebeat将MySQL日志发送到Elasticsearch
    Elasticsearch中text与keyword的区别
    filebeat知识点
    logstash知识点
  • 原文地址:https://www.cnblogs.com/javastart/p/12843760.html
Copyright © 2020-2023  润新知