ios配置文件的坑儿

一、file was built for archive which is not the architecture being linked (armv7s)

项目是基于bluetooth打印机的,需要引用自己打包好的静态库,编译的时候报上面的错。需要将项目中的build Settings配置项中的“Build Active Architecture Only”改为YES  (是否只编译当前适用的指令集)


 

关于这个属性,直接从网上转载过来(关于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的设备就不能运行。

 

目前IOS的指令集

armv6    iPhone、iPhone2、iPhone3G、第一代和第二代iPod Touch

armv7    iPhone4、iPhone4S

armv7s   iPhone5、iPhone5C

arm64    iPhone5S

 

二、宏定义

c++代码中很多地方是通过宏控制的,所有对于宏的检查要很仔细。Debug(测试)、Release(发布)二个版本的宏定义是不一样的,要注意有所区别。所以这里定义出了问题,那自然build测试时跟预期的不一样,而且很难定位问题

 

三、Search Path

这里很容易出错,比如接入第三方SDK时需要引入相应的.framework文件。这里的路径最好使用相对路径(比如使用${SRCROOT}),以避免切换另外一台mac时用户名不一致导致无法编译,需要重新修改路径的问题。

头文件,这里记得补全,不然编译时就会报找不到头文件…

最后一个Library Search Paths比较坑,被这个坑了比较长时间。我使用workspace跟直接打开xcodeproject生成的静态链接库路径不一样,然后切换的时候,在这里并未删除相应的路径,导致一直优先从旧的.a库中查看,结果可想而知。无论我怎么去清理、重新编译,都无法看到改动后的效果

…/xx.a

../xx/xx.a

它会优先找上面的xx.a,然后再找xx下的xx.a。如果在xx.a中找到对应的方法,就不再往下查找了,所以这里就有坑了…

一般这里会按照这样的格式输入路径“$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)”

$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值