用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