问题
When I try running my Xcode Project it fails with an error stating that I have duplicate symbols. I looked online where the find these duplicates but have had no luck:
Any ideas how to fix this?
回答1:
From the errors, it would appear that the FacebookSDK.framework already includes the Bolts.framework classes. Try removing the additional Bolts.framework from the project.
回答2:
For me it helped to switch the "No Common Blocks" compiler setting to NO: It pretty much seems to make sense, the setting is explained here: What is GCC_NO_COMMON_BLOCKS used for?
回答3:
Using Xcode 8, "Update project to recommended settings" option turned ON 'No Common Blocks' for my project.
Turning it back to OFF fixed everything up.
回答4:
For me it was that i imported a file as a .m not a .h by mistake
回答5:
On upgrading to Xcode 8, I got a message to upgrade to recommended settings. I accepted and everything was updated. I started getting compile time issue :
Duplicate symbol for XXXX Duplicate symbol for XXXX Duplicate symbol for XXXX
A total of 143 errors. Went to Target->Build settings -> No Common Blocks -> Set it to NO. This resolved the issue. The issue was that the integrated projects had code blocks in common and hence was not able to compile it. Explanation can be found here.
回答6:
This error happens when Linker is trying to link the obj files. Few reasons that i could think of for this error are:
The duplicated Function/Class is defined at two different places/files in the project and only one of them was supposed to compile for any variation of build command. But somehow both those files got compiled in your project. So you need to check your if-else conditions or other dependencies which adds src files to the list of files needed to be compiled and remove the un-needed file for your particular build command.
The duplicated Function/Class is defined accidentally at two different places/files in the project. Remove the wrong definition.
Clean your OBJ directory before you build again, there could be some old obj files in there from your previous builds which might be causing this conflict.
P.S i am no expert, but this is how i solved this problem when i faced it. :)
回答7:
If you are moving to Xcode 7 or 8 and are opening a really old project, I've encountered this problem:
in SomeConstFile.h
NSString * const kAConstant;
in SomeConstFile.m
NSString *const kAConstant = @"a constant";
Earlier versions of the compiler assumed that the definition in the header file was extern and so including SomeConstFile.h all over the place was fine.
Now you need to explicitly declare these consts as extern:
in SomeConstFile.h
extern NSString * const kAConstant;
回答8:
Below Patch work for me..:)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Setting it back to NO solved the problem!
回答9:
Another Solution is to:
Select Project -> Target -> Build phase -> Compile source -> search for the file which is mentioned in the 3rd last error line (In your case BFAppLinkReturnToRefererView.o).
Then you will see either 1 or 2 files in search result.
Remove one of them and compile again. It should recompile now because there is only one file left and no more conflicts for build.
If that doesnt work the file probably has errors in it and you should remove all of them and then recompile. It should work again.
回答10:
I've messed up my pods while downgrading a pod and I've managed to resolve the issue with duplicate symbols for architecture arm64 by removing the pods and installing them again with:
pod deintegrate
pod install
回答11:
Well, some times when using SDK like FB or Libraries like Vuforia or GoogleAnalytics , adding sample projects may cause the problem that they're already including Frameworks and like so ,so you must make sure not repeating symbols you add manually while they're already included in samples
回答12:
For me, the issue was the style of creation of const, that worked fine until this iOS8.. i had a few lines as:
int const kView_LayoutCount = 3;
in my .h file. Six lines like resulted in 636 linker files once common blocks was set to NO. (14k+ if YES). Moved the lines to .m after stripping .h of the value declaration and compilation was good to go.
Hope this helps others!
回答13:
In my case reason was too stupid :
I had a Constant.h file where I had macros defined. I thought of doing NSString there. and did this :
NSString const *kGreenColor = @"#00C34E";
this caused the problem of Duplicate Symbols for Architecture arm64 and Linker command failed with exit code 1. Removing const NSString line worked for me.
回答14:
check your include file, I had this issue because I accidentally #imported "filename.m" instead of "filename.h", autocorrect (tab) put an "m" not "h".
回答15:
From the errors, it would appear any Classes appear multiple time.Find and removed that Classes it will working.
Am creating AppDelegate.h and .m file creating multiple time. So this error will occur.Finally find and removed that classes it's working fine for me.
回答16:
to solve this problem go to Build phases and search about duplicate file like (facebookSDK , unityads ) and delete (extension file.o) then build again .
回答17:
For me, I created a method called sampleMethod
in ViewController_A and created the same method in ViewController_B too, It caused me this error, then i changed the method name in ViewController_B to secondSampleMethod
. It fixed the error.
Seems like a Good feature to reduce the code and not to duplicate the same code in many places.
I tried changing the No Common blocks from Yes to No then enabling testability from Yes to No. It didn't worked. I Checked duplicate files also in build phases, but there is no duplicate files.
回答18:
I got this issue because I was lazily defining a variable in my .m outside of a method, then in another .m file I was defining another variable with the same name outside a method. This was causing a global variable name duplicate issue.
回答19:
The problem for me was I had manually included a framework but then also included that same framework in CocoaPods not knowing I did so. Once I removed one or the other, the problem went away
回答20:
See Duplicate symbol error when adding NSManagedObject subclass, duplicate link
来源:https://stackoverflow.com/questions/26303782/duplicate-symbols-for-architecture-arm64