【axc】关于duplicate symbols for architecture x86_64错误的第三种可能及其解决办法

今天分析一下duplicate symbols for architecture x86_64错误  也是困扰我一段时间   不过很幸运 在半个小时内找到了解决方案

百度上对于duplicate symbols for architecture x86_64这种错误最多的两种解决方法是:

第一:有框架文件没有包含,导入错误即解决
第二:是由于我的粗心,在导入头文件时不小心把.h导入了.m文件,所以出现了上述错误,有一个duplicate的错误提示,修改了导入部分OK了。

但是。。我却遇到了第三种情况。。

【axc】关于duplicate symbols for architecture x86_64错误的第三种可能及其解决办法

duplicate symbol _RoutePlanningViewControllerStartTitle in:

/Users/axc_5324/Library/Developer/Xcode/DerivedData/health_town-arzecxyrnmmpyxacejwclxojeaml/Build/Intermediates/health town.build/Debug-iphonesimulator/health town.build/Objects-normal/x86_64/MyTabbarViewController.o

/Users/axc_5324/Library/Developer/Xcode/DerivedData/health_town-arzecxyrnmmpyxacejwclxojeaml/Build/Intermediates/health town.build/Debug-iphonesimulator/health town.build/Objects-normal/x86_64/NavigationViewController.o

duplicate symbol _RoutePlanningViewControllerDestinationTitle in:

/Users/axc_5324/Library/Developer/Xcode/DerivedData/health_town-arzecxyrnmmpyxacejwclxojeaml/Build/Intermediates/health town.build/Debug-iphonesimulator/health town.build/Objects-normal/x86_64/MyTabbarViewController.o

/Users/axc_5324/Library/Developer/Xcode/DerivedData/health_town-arzecxyrnmmpyxacejwclxojeaml/Build/Intermediates/health town.build/Debug-iphonesimulator/health town.build/Objects-normal/x86_64/NavigationViewController.o

duplicate symbol _RoutePlanningPaddingEdge in:

/Users/axc_5324/Library/Developer/Xcode/DerivedData/health_town-arzecxyrnmmpyxacejwclxojeaml/Build/Intermediates/health town.build/Debug-iphonesimulator/health town.build/Objects-normal/x86_64/MyTabbarViewController.o

/Users/axc_5324/Library/Developer/Xcode/DerivedData/health_town-arzecxyrnmmpyxacejwclxojeaml/Build/Intermediates/health town.build/Debug-iphonesimulator/health town.build/Objects-normal/x86_64/NavigationViewController.o

ld: 3  duplicate symbols for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

有道给我的翻译是这样的:重复的路线规划视图控制器开始象征冠军 = =。。玛德制杖

不过也比较清楚 。。。某个controller出现了问题  出现了导入重复错误。

可是!他喵的我检查了半天也!没!有!导!入!错!误!

经过代码的一步步排查(还好我从小养成了良好的编码风格,要么光找就得找一天)。。发现了这么三个奇(sha)葩(bi):

【axc】关于duplicate symbols for architecture x86_64错误的第三种可能及其解决办法

这是高德SDK里的路径导航用到的变量值,当时直接复制过来的。。没管那么多,谁知道这时候掉链子了

我盯着他看了半天,他盯着我看了半天。大眼盯小眼看了三分钟,,,,,

嗯,delete(去死吧你!)

然后把他们声明到了interface里去,赋值在view did load中进行  假装这是普通变量

编译,,成功!

我也不知道为什么高德2015年的SDK Demo为啥不会出错,哦对  忘了说了  这个情况在真机上正常  但无法在模拟器中编译

以上就是对于duplicate symbols for architecture x86_64这种报错的第三种解决办法,,可以检查检查代码中有没有声明的弱语法变量,而且还没有编译器的提示的那种。。最后最重要的一点 大家不要随便命名!不要随便命名!不要随便命名!否则很容易和SDK中的对象或变量重名!

毕竟SDK不会告诉你他用了那些第三方库是不是?这样很没B格的好吧。。所以命名最好按照规范命名。

祝大家编程愉快!

上一篇:java中出现内存溢出的几种情况


下一篇:iOS之在写一个iOS应用之前必须做的7件事(附相关资源)