ld: xx在armv7架构下出现重复符号 Xcode项目

6
大家好,我有一个Xcode项目,每次尝试构建该项目时都会出现以下错误: ld: xx重复符号,适用于armv7 Xcode项目 clang: 错误:链接器命令失败,退出码为1...
我已经搜索了许多解决方案,大部分都说要在项目的“构建阶段->编译资源”部分中消除重复文件,或者将一些文件中的导入.m更改为.h。问题是,已编译资源列表甚至没有排序,并且由于我的项目中有很多文件,我甚至不知道要修复哪些文件。有关如何清理此内容的任何建议吗?

通常情况下,这种情况发生在您有多个文件时,可能您已经添加了外部框架,还添加了源代码。 - iphonic
@iphonic 我刚刚查看了一下,发现我的重复符号在我的框架中,并且都是输出文件,但我不确定该如何解决。你有什么想法吗? - Meeko
3个回答

6
我有时会遇到这个错误,问题总是出在这里。我在一个类的.m文件中有一个静态变量,在另一个.m文件中也有同名的静态变量。显然,编译器不喜欢有两个同名的静态变量,无论它们是否在不同的文件中。因此,请检查是否存在重复的静态变量名称或#define宏定义。此外,可能不是重复的文件或导入两次的文件。如果导入了两个不同的文件,但每个文件都有相同名称的变量或宏,将会出现错误,因为编译器无法确定使用哪一个。冲突的变量应该在错误提示中提到的文件中。希望这可以帮助你!

4

您的项目中可能导入了某些文件两次,请尝试分析错误日志,它一定会引用到某个文件,在该文件中可能会出现“YourViewController.O”错误,它发现了重复的文件。在项目导航器中搜索“YourViewController”,您需要从Xcode项目中删除这些文件,然后重新构建。


1
所以我刚刚查看了一下,发现我的重复符号在我的框架中,并且都是输出文件,但我不确定该如何解决。你有什么想法吗? - Meeko
如果您正在使用Cordova,请查看下面的答案。我开始删除那些文件。但这是繁琐的工作 - 我意识到我的文件都与我的cordova-email插件有关。因此...请参阅下面的答案。 - Sandi Laufenberg-Deku

0
如果你像我一样使用 Cocoapods,你可能会发现其他答案并没有帮到你,因为重复的符号是由 pod 文件自动生成的。
对我有用的方法是查看重复符号列表,例如:

duplicate symbol _OBJC_METACLASS_$_AFImageCache in:

___/Build/Products/Debug-iphoneos/libPods-AFNetworking.a(UIImageView+AFNetworking.o)

___/Build/Products/Debug-iphoneos/libAFNetworking.a(UIImageView+AFNetworking.o)

ld: 214 duplicate symbols for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

然后进入你的项目/目标构建设置->其他链接器标志,删除对重复 pod 的引用(在我的情况下是 AFNetworking)。
清理、重新构建,应该就可以了。

--

据我所知,这可能是因为其他的Pod引用了AFNetworking,导致了冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接