zoukankan      html  css  js  c++  java
  • xcode编译时,有第三方库时,编译设置build active architecture only问题

    本文转载至 http://blog.csdn.net/ysysbaobei/article/details/16371263

    编译静态库

    1、http://blog.csdn.net/dengdengxiximeimei/article/details/8845621

      

    关于Build Active Architecture Only属性

    这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。

    而设置为no时,会编译所有的版本。

    这个是设备对应的architecture:

     

    armv6:iPhone 2G/3G,iPod 1G/2G

    armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G

    armv7s:iPhone5, iPod5

     

     

    编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。

     

    所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。

    2、http://blog.sina.com.cn/s/blog_45e2b66c0101bgep.html

    build active architecture only设置:

    添加一个.a文件到工程中,然后死活编译不过去,提示错误信息:

    ld: warning: ignoring file /Users/test/Desktop/new31248/shell42/core/lib/Release-iphoneos/libPyConvertlib4Ipad.a, file was built for archive which is not the architecture being linked (armv7s): /Users/test/Desktop/new31248/shell42/core/lib/Release-iphoneos/libPyConvertlib4Ipad.a

    Undefined symbols for architecture armv7s:

      "*******(NSString*)", referenced from:

          -[***** *****:] in *****.o

    。。。。。。。

    ld: symbol(s) not found for architecture armv7s

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    具体相关设置如下:

    build <wbr>active <wbr>architecture <wbr>only

    build <wbr>active <wbr>architecture <wbr>only

    build <wbr>active <wbr>architecture <wbr>only

    用lipo -info 查看.a文件

    :input file ******.a is not a fat file

    Non-fat file: ******.a is architecture: armv7

    说明.a文件只是一个armv7结构,而自己要编译的是要支持armv7和armv7s的fat file,于是可以将architectures属性(保罗release和debug)改为:armv7,这样可以编译过去。

    也可以将Build Active Architecture Only 改为Yes,但是此种方法都是只会支持armv7和向下兼容,如果想要兼容armv7s,就最好将.a文件用armv7s 编译,这样就兼容armv7了。

    armv6、armv7、armv7s是arm CPU的指令集,一般是向下兼容的。如iPhone4sCPU支持armv7,但它会兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5是完全支持armv7的,所以不用担心armv7的库不能在iPhone5上跑,一般情况是不会出问题的。但需要提醒的是,苹果是自Xcode4.5之后,就放弃了对armv6的支持,换言之,就是Xcode4.5正常情况是不能编译armv6库的(当然据说通过特殊手段可以支持,之前在网有看到一些在神的帖子,感兴趣的可以搜搜)。还有一点提醒大家,就是可能Xcode4.5编译的包没有armv6,提交应用上传时,会提示要支持armv6,当时此问题把我纠结了好一阵。后来我将支持的最低版本发为iOS4.3就OK。

    另附加转载:http://blog.csdn.net/yujie1985/article/details/8552650

    armv6、armv7、armv7s是arm CPU的指令集,原则上是向下兼容的,如:iPhone4sCPU支持armv7,但它会兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。iphone5CPU支持armv7s,它也会兼容armv7。

    如果引用到第三方的库,以前在iphone4s下编译没有问题,但是换成iphone5之后,提示:

    Undefined symbols for architecture armv7s:
      "_OBJC_CLASS_$_AMapView", referenced from:
          objc-class-ref in libMAMapKit.a(MAMapView.o)
    ld: symbol(s) not found for architecture armv7s

    大体意思是:引用自XX.a静态库的XX类不支持armv7s指令

    原因是:你引用的静态库确实不支持armv7s,那么你要想顺利编译通过,要么通知开发修改,等待支持了之后再测;要么在target的build settings中的valid Architectures 将armv7s先暂时去掉,编译就可以成功。(等待支持了之后,再添加上)

  • 相关阅读:
    十三、结构类型(5)——联合
    十三、结构类型(4)——结构中的结构
    十三、结构类型(3)——结构与函数
    十三、结构类型(2)——结构
    十三、结构类型(1)——枚举
    十二、字符串(2)——字符串函数
    permutation-based language model
    mask language model
    图网络模型
    知识图谱数据可视化
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/4176742.html
Copyright © 2011-2022 走看看