Xcode 报错:duplicate symbols for architecture x86_64错误分析及解决

摘要:
3.重复枚举值的定义将导致对枚举值的所有引用报告重复编译。作者曾经遇到过这个错误,以便验证原始枚举定义和宏定义的枚举//旧的枚举定义enumNetConnectState{NetConnectStateDisconnected,NetConnectStateConnecting,NetConnectState Connected,}//每次使用它时,请将enumNetConnect Statestate1=NetConnectStateConnected//NetConnectStatestate=NetConnectState Connecting;//报告了一个错误//如果typedef用于重新定义枚举类型。

1、参与编译的.m文件重复导入。一般是手动往工程中导入源文件时导入在了不同的目录。

Xcode 报错:duplicate symbols for architecture x86_64错误分析及解决第1张

解决方法也很简单,在 Target -> build parses -> complie sources,去掉重复的文件即可。

2、导入头文件时,误写为导入.m 文件

#import xxx.h 写成了 #import xxx.m

解决方法就是,导入头文件。

3、定义了重复的枚举值

这时会导致所有引用了该枚举值的都会报重复编译
笔者曾为了验证原始枚举定义和宏定义枚举时遇到该错误

//旧的枚举定义
enum NetConnectState {
    NetConnectStateDisconnected,
    NetConnectStateConnecting,
    NetConnectStateConnected,
};
//使用 每次都要写enum
enum NetConnectState state1 = NetConnectStateConnected;
//NetConnectState state = NetConnectStateConnecting;//会报错

//如果用了 typedef 重新定义枚举类型。 就可以省略 ennum,
typedef enum NetConnectState  NetConnectState;
NetConnectState state2 = NetConnectStateConnecting;

//NS_ENUM, NS_OPTION 是苹果处理过的宏,可以向后兼容,推荐使用

//枚举宏 用foundation框架提供的 枚举宏定义一个
typedef NS_ENUM(NSInteger, WJWNetStatus) {
    WJWNetStatusDisconnected,
    WJWNetStatusConnecting,
    WJWNetStatusConnected,
};

//选项宏, 多个值可以同时作为选项.
typedef NS_OPTIONS(NSInteger, WJWOrentationStatus) {
    WJWOrentationStatusTop = 1 << 0,
    WJWOrentationStatusLeft = 1 << 1,
    WJWOrentationStatusBottom = 1 << 2,
    WJWOrentationStatusRight = 1 << 3,
};
由于用了typedef 声明了同名的枚举变量,会发生枚举值重复定义
//使用 每次都要写enum
enum NetConnectState state1 = NetConnectStateConnected;
//NetConnectState state = NetConnectStateConnecting;//会报错

//如果用了 typedef 重新定义枚举类型。 就可以省略 ennum,
typedef enum NetConnectState  NetConnectState;
NetConnectState state2 = NetConnectStateConnecting;

解决方法:
尽量用宏定义枚举,只定义一次。

4、在继承协议的时候,Build Settings →Other Linker Flags 中添加了 -ObjC

协议文件不要添加 -Objc 编译标示。

免责声明:文章转载自《Xcode 报错:duplicate symbols for architecture x86_64错误分析及解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 获取指定文件夹中所有的文件(包括子文件夹的文件)IDEA的基本使用技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

xcode KVC:Key Value Coding 键值编码

赋值 // 能修改私有成员变量 - (void)setValue:(id)value forKey:(NSString *)key; - (void)setValue:(id)value forKeyPath:(NSString *)keyPath; - (void)setValuesForKeysWithDictionary:(NSDictionary...

【转】使用Xcode和Instruments调试解决iOS内存泄露

转自:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在。所以了解原理很重要。 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的...

Xcode 沙盒选项

 Capabilities 开启Sandbox权限--转载--https://juejin.cn/post/6844904199688290318 应用开发完成提交到App Store时,必须进行沙盒化。切换到工程target设置Tab的Capabilities中。 第一项就是App Sandbox开关,点击ON,表示应用使用沙盒。 上图的选项的一些解释如...

深入理解Enum(枚举类)

Java 枚举 为什么要引入枚举类 一个小案例 你写了一个小程序,不过好久不用了,突然有一天,你想使用一下它。程序要想正确运行,需要将今天星期几存到数据库里。这个时候,你开始犯难了。 当初的你还很年轻,不懂程序界的险恶,设计这个程序的时候,傻不拉几把这个字段设计为int类型的,用0代表周日,1代表周一。。。6代表周六,添加的时候就setWeekday(0)...

Linux 视频设备驱动V4L2最常用的控制命令使用说明

Linux视频设备驱动常用控制命令使用说明设置视频设备属性通过ioctl来进行设置,ioctl有三个参数,分别是fd, cmd,和parameter,表示设备描述符,控制命令和控制命令参数。1. 控制命令VIDIOC_QUERYCAP功能: 查询设备驱动的功能 ;参数说明:参数类型为V4L2的能力描述类型struct v4l2_capability;str...

Java中枚举的使用

常量与枚举 一、常量定义方法        常量是其值固定不变的量,一般可以分为字面常量和命名常量,如数字1,2,1.3,字符串“abc”,这些就是字面常量,而命名常量是我们使用一些有意义的名称来代表字面常量值,通常命名常量有助于我们更好地理解程序的逻辑。        在Java中,我们通常使用public static final ... 方式来定义常...