以前遇到過幾回這種問題,以爲並非什麼太大的問題,就直接把這種問題 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)
這裏你們須要知道一點的是,若是是函數重載,編譯的時候只看文件名,而不在意你後面有多少參數,若是是文件名相同的話也是不行的.因此出現第四種狀況的話只要把函數的名字改掉一個便可解決.
著做權聲明:本文爲做者原創,歡迎轉載分享。請尊重做者勞動,轉載時保留該聲明和做者博客連接,謝謝!