以前遇到过几回这种问题,以为并非什么太大的问题,就直接把这种问题 pass 掉了,今天给一个小妹妹解决问题,却让我废了一段周折.因此仍是在博文上记载一下吧.ios
今天出现的这个问题的详细错误报告以下:swift
Ld /Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Products/Debug-iphonesimulator/BaseDraw.app/BaseDraw normal i386 cd /Users/home/Desktop/1109/BaseDraw export IPHONEOS_DEPLOYMENT_TARGET=7.0 export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.1.sdk -L/Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Products/Debug-iphonesimulator -F/Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Products/Debug-iphonesimulator -filelist /Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Intermediates/BaseDraw.build/Debug-iphonesimulator/BaseDraw.build/Objects-normal/i386/BaseDraw.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -mios-simulator-version-min=7.0 -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -dependency_info -Xlinker /Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Intermediates/BaseDraw.build/Debug-iphonesimulator/BaseDraw.build/Objects-normal/i386/BaseDraw_dependency_info.dat -o /Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Products/Debug-iphonesimulator/BaseDraw.app/BaseDraw
duplicate symbol _drawCircle in: /Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Intermediates/BaseDraw.build/Debug-iphonesimulator/BaseDraw.build/Objects-normal/i386/MBCircleView.o /Users/home/Library/Developer/Xcode/DerivedData/BaseDraw-cainjridtcbolzatdpicfdxiozma/Build/Intermediates/BaseDraw.build/Debug-iphonesimulator/BaseDraw.build/Objects-normal/i386/MBHumanView.o ld: 1 duplicate symbol for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)
首先脑补一下.o 文件是什么意思:在 Xcode 中有不少经常使用的文件类型,最多见的仍是.h\.m\.swift,那么问题来了,咱们没有编写.o 的文件怎么会出现.o 的文件有重复呢? 众所周知,Xcode 编译器在编译程序的时候要通过三个步骤,分别是:编译---->连接---->运行,这三个步骤少了哪个都不行.因此.o 文件就是在编译阶段产生的临时文件,也就是说你这个程序在连编译阶段都没过.废话很少说,下面来详细的解决下这种错误的解决办法:app
这个错误的提示很明确,就是Xcode 在编译的时候出现了重复文件,并且矛头直接指向的是 MBCircleView.o 和 MBHumanView.o 这两个文件,那么问题来了,罪魁祸首就是在这两个文件当中.通常解决办法能够从如下几个方面考虑一下:iphone
在使用import 导入 MBCircleView.h 和 MBHumanView.h 的时候,多是引入头文件,因为疏忽,误引入.m 文件,这种通常仔细检查一下引入的源文件就能找到问题的所在.函数
在一个团队协做开发的时候出现这种错误的几率稍微大一点,好比A 小孩建立了一个 MBCircleView 放在A 文件夹下,B 小孩也建立了一个相同名字的 MBCircleView 放在 B 文件夹下.当两我的在合并代码后,编译器会同时编译这两个文件,仍是会出现这种错误.ui
在 Targets 的 Build Phrases 设置里,查看下 Complie Sources这一项,看看出现问题的类是否是重复的.若是是重复的,删除掉从新添加也能解决这个问题.spa
最后单独说下今天我遇到的这个问题, 这个问题相对上面的那些问题仍是有点点不太同样的,首先说明一下,这个妹子的代码在.m 文件的函数是用 C 语言的形式写的.code
在 MBCircleView 中的 C 函数的形式以下:orm
void drawCircle()
在 MBHumanView 中的 C 函数的形式以下:
ip
void drawCircle(CGContextRef ctx, int radius, CGFloat centerX, CGFloat centerY)
这里你们须要知道一点的是,若是是函数重载,编译的时候只看文件名,而不在意你后面有多少参数,若是是文件名相同的话也是不行的.因此出现第四种状况的话只要把函数的名字改掉一个便可解决.
著做权声明:本文为做者原创,欢迎转载分享。请尊重做者劳动,转载时保留该声明和做者博客连接,谢谢!