我要提前在这里道歉。我正在工作的项目属于几个NDAs,所以我不能像我通常想要的那样具体。
我正在开发一个iOS项目,其中包含一个.h和.a文件形式的预编译库。我开始使用这个库的特定版本进行开发,一切都运行正常。他们发布了一个新版本,我需要一个特定的新功能。
在旧版本和新版本之间,有几个函数名称已更改。当我更新我的代码以调用新方法时,我在编译时得到Apple Mach-O Linker Error
:(名称已被更改以保护无辜者)
Undefined symbols for architecture armv7:
"methodName", referenced from:
myMethod() in MyClass.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
我知道它看起来好像不包含armv7代码,但这实际上是一个红色的鲱鱼。如果我将项目和目标的体系结构构建设置设置为Standard (armv6 armv7)
,我会得到相同的链接器错误,除了它会说armv6。
问题是,我可以将新的.h和.a文件放在一个新项目中并调用相同的方法而不会出现链接器错误!
我感觉有些东西没有得到清理,而且它正在尝试针对旧的.a文件进行编译。我在Snow Leopard上使用Xcode 4.1。我已尝试从项目中删除该文件,从Link Binary With Libraries
下的Build Phases
部分删除.a文件以获取目标,清除,添加.a文件并重建,但仍然出现错误我在这里开始变得疯狂。
答案 0 :(得分:1)
当我切换到新版本时,我将新库放在旧版本旁边的文件夹中,以防我不得不在某个时候切换回来。显然,当我删除旧版本时,它没有在目标的构建设置中从Library Search Paths
中删除旧版本的.a文件的路径。删除旧路径,一切都恢复正常。