zoukankan      html  css  js  c++  java
  • 第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
     
  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/javastart/p/12843760.html
Copyright © 2011-2022 走看看