由于枚举类型导致的1 duplicate symbol for architecture x86_64错误

Posted dzldzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于枚举类型导致的1 duplicate symbol for architecture x86_64错误相关的知识,希望对你有一定的参考价值。

错误如下:

duplicate symbol _iphoneType in:
    /Users/midmirror/Library/Developer/Xcode/DerivedData/PRTPrinter-eixyioynyswgruahtmzninftkbmm/Build/Intermediates/PRTPrinter.build/Debug-iphonesimulator/PRTPrinter.build/Objects-normal/x86_64/PRTScreenFit.o
    /Users/midmirror/Library/Developer/Xcode/DerivedData/PRTPrinter-eixyioynyswgruahtmzninftkbmm/Build/Intermediates/PRTPrinter.build/Debug-iphonesimulator/PRTPrinter.build/Objects-normal/x86_64/PRTHomeVC.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这个问题比较奇葩的地方在于,用真机是可以编译成功执行的,但是用模拟器就不能编译通过。google 了半天也没找到方法。特此记录。

罪魁祸首是用了一个 C 语言的枚举类型定义方式

// 错误
enum iphoneType{
    iphone4s = 320*480,
    iphone5s = 320*568,
    iphone6  = 375*667,
    iphone6p = 414*736,
    iPad     = 1024*768
}iphoneType;

改成Objtctive-C 的枚举类型样式就可以了

// 正确
typedef NS_ENUM(NSInteger, iphoneType) {
    iphone4s = 320*480,
    iphone5s = 320*568,
    iphone6  = 375*667,
    iphone6p = 414*736,
    iPad     = 1024*768
};

其实在C 语言的样式前面直接加上 typedef 也可以,不过不建议这么做,还是乖乖按照 OC 的定义方式来吧。



文/midmirror(简书作者)
原文链接:http://www.jianshu.com/p/2b79e450d67e
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

以上是关于由于枚举类型导致的1 duplicate symbol for architecture x86_64错误的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎样取得枚举型的名字 而不是值

UIViewAnimation 导致从枚举类型隐式转换

delphi 枚举类型

Java枚举类型在RPC调用时由于版本不一致遇见的问题

按 Max 分组

具有基础类型的枚举。无意中返回字符串表示[重复]