lipo合并iPhone模拟器和真机的静态类库

本文介绍了在Xcode中解决lib文件无法同时适用于Simulator和Device的问题。通过分析.xcodeproj文件,发现了libsearchpath中包含的不同架构路径导致的错误,并给出了使用lipo工具创建通用lib的方法。

      用xcode写过lib的TX都应该试过,simulator和device 编译出来的lib不能通用,即跑simulator需要simulator的库,跑device需要device的库,这是个很麻烦的问题,特别是XCode很智能地把lib的路径添加到lib search path中的时候。

      举个例子,一开始都是使用simulator的,然后往项目中加入一个simulator的库,跑起来没问题。然后选device模式,编译出错,说file is not of required architecture in iPhone Device之类的,于是把simulator的库去掉,加入device的库,编译还是出相同的错误,这是个很郁闷的问题,仔细查看配置,没发现明显的异常。于是好奇地想窥探下simulator和device在proj file 是怎样的,又苦于不会在mac下打开.xcodeproj文件,于是暴力解决问题,把.xcodeproj拿到windows下解剖,仔细研究文件内容后,发现里面的lib search path 有两个路径,就是simulator和device的库的位置,于是猜其问题是在device下,从lib search path中找到了lib.a文件,就用上了,发现架构不对,于是报错,把lib search path中多余的路径删去后,编译成功。

      到底simulator和device有啥不同呢,从info->build->Valid Architectures发现,simulator下的是i386,device下的是armv6 armv7。终于明白问题所在,必须google之。从stack over flow有提到(http://stackoverflow.com/questions/2717857/pocketsphinx-file-is-not-of-required-architecture-in-iphone-device-but-working-i),答案中有人提到lipo这玩意,尝试后,成功了,具体用法是:

lipo -create path/simulator.lib path/device.lib -output path/myLib.lib

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值