编译失败:ld:重复的符号_OBJC_CLASS _ $ _ Algebra5FirstViewController
我通过iPhone模拟器运行我的应用程序时突然出现这个错误:
铿锵声:错误:链接器命令失败,退出代码1(使用-v来查看调用):
ld:重复符号_OBJC_CLASS _ $ _ Algebra5FirstViewController in … / Algebra5-anwcuftojtxtgkfootneeeqhwztj / Build / Intermediates / Algebra5.build / Debug-iphonesimulator / Algebra5.build / Objects -normal / i386 / ExercisesViewController.o and … / Algebra5-anwcuftojtxtgkfootneeeqhwztj / Build / Intermediates / Algebra5.build / Debug-iphonesimulator / PSLE Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o for architecture i386
这是什么一回事呢?
它看起来像Algebra5FirstViewController类是多次编译的。
你可以确保.m和.mm只包含一次在Xcode的项目源代码中? 您也可以通过检查编译日志(右侧的最后一个图标,在断点图标旁边)来确认,并确认它只编译一次。
另外,如果这个类是你链接的库的一部分,并且你有一个同名的类,那么你可能会有同样的错误。
最后,你可以尝试一个干净的和重build,以防万一旧的目标文件仍然存在,并在编译的文件中有一些垃圾。 以防万一…
编辑
我还注意到第二个参考是在ExercisesViewController的文件中进行的。 也许这个文件里有东西。 要么你input了Algebra5FirstViewController文件而不是.h,或者ExercisesViewController有@implementation(Algebra5FirstViewController)而不是@implementation(ExercisesViewController),或者有一些垃圾与这个文件一起清理一个重build。
如果在“构build阶段”的目标的“编译源”部分中多次引用相同的.m文件,就会发生这种情况。 删除重复的条目,你应该没问题。
也有这个问题,通过在头文件(不正确)声明一个const * NSString
而不是实现文件(正确)
我得到这个问题,因为我不小心导入.m而不是.h。 希望读一下这个节省一些同样的问题的人。
我有同样的问题。 解决了!
如果您已经将任何文件导入到项目中,则在“目标(项目名称)” – >“构build阶段” – >“编译源”中检查是否存在.m(main)文件。
如果文件不存在,则使用显示的(+)添加button来包含它。 另外,如果重复的文件存在(如果有的话),然后删除它。
现在按cmd + shift + k清理项目。 新build不应该显示这个错误。
从另一个项目添加文件时出现类似的错误,如@paiego解释。 我的错误是,我没有select“ 添加到目标 ”。 如上所述,我删除了引用,并再次添加文件,但这次检查“ 添加到目标 ”。
我得到了类似的错误,我解决了这个问题 。
尝试将“构build主动架构”设置为“否”作为“Pods”项目和您的应用程序的目标
在一个案例中,当将一个新的类“.h和.m”拖到项目中时,我看到了这个错误。 我find的唯一解决scheme是删除对这些文件的引用,然后通过项目菜单将它们添加回来。
我在TableViewController中导入一个ViewController.m时遇到了它。 如果退出,请尝试删除“#import”ViewController.m“”。 希望这个帮助!
'linker command failed in exit code 1(use -v to see invocation)' – 我在iPhone上运行phonegap应用程序时出现此错误。 我将Build Active Architecture Only修改为Yes,它工作正常。
看来对于m,我把文件拖到项目中,之后没有工作,点击文件“添加文件到项目”。 两者都是不正确的做法。 只需将其拖入放置其他.h和.m文件的项目文件夹(在finder中)即可。
一旦我得到了
18 duplicate symbols for architecture i386 clang: error: linker command failed with exit code 1
对我来说,这是因为我在开关盒中使用了“const NSInteger”。
我所做的是将常量NSInteger更改为枚举,并用枚举值replace引用。
这为我解决了这个错误。
发生这种情况,“编译源”部分中缺less某些文件,或者find某些文件的重复条目。 在我的情况下,我有两个文件重复的条目,我删除了每个文件的一个条目,这解决了我的问题。 希望这可以帮助。
我发现这篇文章为我提供了一个解决scheme。 它适用于Xcode 7,其中在以前的版本中,默认的No Common Blocks是Yes,而不是No。
这是文章的引用:
问题似乎是在最新版本的Xcode中,“生成设置”窗格的“Apple LLVM 6.1 – 代码生成”部分中的“无公共块”设置为“是”。
这引起了我将描述为循环引用,其中包含在我的编译源中的类是通过另一个源文件(appDelegate.m)中的#import引用的。 这会导致在原始基类中声明的variables的重复块。
将值更改为No立即启用我的应用程序来编译和解决我的问题。
我发布了一个新的答案,因为我遇到了这个错误,不得不使用一种我认为特定于iOS 9的解决scheme。
我不得不明确地禁用Build设置中的Enable Bitcode,这个设置会在更新中自动打开。
引用的答案: iOS 9中的新警告
[XCODE 7.1 UPDATE]
第一个选项,工作:
我将Deployment Target
从7.1更改为8.1,错误消失。
希望能帮助别人。
更新(第2天) :第二次我在2天后回到这里。
在第二天,除了这个令人讨厌的错误之外,我开始得到更多的错误。 问题是Xcode无法识别的冲突文件。 我使用下面的链接作为帮助:
-
“_OBJC_CLASS _ $ _ viewsampleViewController”,引用来自:
-
'ld:warning:目录未find选项'
最终:
- “_OBJC_CLASS _ $ _ viewsampleViewController”,引用来自:
我从FrameWork Search Paths
+ Compile Resources
+ Run Script Phases
+豆荚删除所有的东西,然后再次重新安装它们,最终find成功。
在我的大小(第二天)的问题更多的是与Xcode不认识的冲突的文件或文件的问题。
但最终,除去一切(上面提到的和链接),清理很多次,并重新安装豆荚/框架/运行脚本阶段帮助。
真的希望这可以帮助别人。
在OSX 10.7.5上运行Xcode 4.6.3可以通过从$(NATIVE_ARCH_ACTUAL)更改Build Machine的体系结构来修复此错误。
我曾经(偶然)将.h和.m文件导入到同一个类中,
我在实现一个没有添加必要框架的子类的时候出现了这个错误(在这个例子中没有MediaPlayer框架的MPMoviePlayerController)
使用Bolts.framework时,我得到了同样的问题。 事实certificate,当Bolts被损坏,没有重新导入量将解决这个问题。 我不得不回到原来的下载文件,并从头开始重新导入。 这固定它马上。 这是一个奇怪的问题,它让我永远把它弄清楚…希望这个技巧会让你们一些同样的挫折:)
当我命名一个UILabel引用和一个int同样的事情时,我发生了这种情况,当我仅仅在我试图运行它时才input它,所以我没有得到一个错误,所以我没有意识到这是问题,但是如果你有一个像标签这是“分数”,你把它称为分数,并命名一个int也是得分也是这个问题发生。
如果您有缺less的库或文件,则可能会出现此问题的变化。 检查你的工程资源pipe理器中没有任何缺失的文件:如果Xcode找不到它们,它们将被写成红色。
“链接二进制与库”有旧的项目名称吊舱库。 修好后删除。
- 列表项目
- 项目
- build立阶段
- 链接二进制与库
- 删除弃用的库。
我和图书馆有同样的问题,我尝试了这里列出的所有答案,没有任何帮助。
我最终只是从链接二进制库中删除图书馆,然后重新添加它 ,它工作正常。
解决这个问题的唯一(也是可靠的)方法是从命令行构buildtesting:
xcodebuild -workspace MyProject.xcworkspace/ -scheme MyScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' test
所以,在这一点上,你的编译肯定会失败,但你会看到所有的链接问题。 在我的情况下,我有几个问题,如:
- ld:找不到框架'Foo'
为了解决这个问题,你需要在你的目标BuildSettings-> Linking-> OtherLinkerFlags上去掉'Foo'框架。 - 使用未parsing的标识符“ClassName” 。
为了解决这个问题,我需要向UITest目标添加/检查文件的目标成员。
其他可能的问题将由xcodebuild提出,你可以很容易地修复它。
简单地清洗CMD + SHIFT + K ,然后build立CMD + B为我工作。
在我的情况下,我有一个在其他链接器标志库的引用。 删除它摆脱了错误。
我有同样的错误。 我导入了一个我不再使用的audio框架。 我删除它(不要删除它!),它成功地build立。