xcode6.3编译ios项目时报错Sysbol(s) not found for architecture

ios项目中用到一个第三方库,编译链接时总报错,好不容易摆平,记录分享哈

什么是静态库和动态库。在编译期间就把代码链接到执行文件中,运行时此库相当于自己代码中一部分。动态库则不会在编译期间做什么,直到程序运行时才去库中加载需要的代码。做过windows平台的对dll应该熟悉,loadlibrary函数就用量做这个的。ios上仅支持静态库连编,自己搞个动态库,appstore上审核都过不了。

1,第三方库提供h头文件和a静态库,直接在xcode左边工程目录中添加这些文件,菜单为Add Files to…
一切顺利!

2,我天真地以为完事了,就在自己的m文件中,包含静态库的h头文件,然后就开始调用其方法了。结果了,不用说自然失败了。

3,既然有错误了,就回头看看这个第三方静态库,发现它还需要依赖一些framework,这个简单,于是乎在xcode中点击项目,在右边的Build Phases中,有个Link Binary With Libraries选项,点+号添加需要的即可。

4,再试着编译运行一遍,还是不行。报ld链接警告错误。警告:ignoring file 意思是完全忽略掉我添加的静态库a文件,错误是:Sysbol(s) not found for architecture x86_64.可我明明已经把需要的h文件和a库加到工程中了啊!

5,我的模拟器和真机都是5s,想着都64位了,这库还是以前的,是不是兼容性问题。于是再次点击项目,打开右边的Build Settings,第一个Architecture重点研究,SDK我用的8.3,想着是不是太新了,换成6.1试试,没有用,不是这个原因。Architectures选的是Standard architecture,挺对的啊。下面Valid Architecture看了,有arm64,armv7,armv7s。把arm64选项干掉,就留个armv7,跑跑,发现还是不行。虽然依然失败,但实践证明确实需要这么改,来避免arm64的问题,只是还需要解决其他报错。

6,我回到工程看了下,确认增加了静态库依赖的一些m文件。可在Build Phases的compile source中,我发现没有这些文件。奇怪了。在工程中删除,再次添加哈,发现有两个选项,Create groups和create folder reference,默认是Create groups,我改成
Create folder references,添加后在Build Phases的compile source中出现了。再次编译运行,虽然还是失败了,但报错是ARC问题,这个就简单了。

因为添加的内容中有文件夹,所以需要建立references,让xcoderpoj工程文件知道这些源文件,方能识别编译。

7,离成功很近了,因为这个库是以前代码,那时还没ARC编译,这个简单,在Build Phases的compile source中,找到这些非ARC文件,第二栏Compiler Flags双击填入-fno-objc-arc,搞定。运行后,模拟器真机都没问题。

小提示,command+shift+k组合键,是清除之前的编译信息。这么来一下,觉得清爽许多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值