Xcode 报错:duplicate symbols for architecture x86_64错误分析及解决
1、参与编译的.m文件重复导入。一般是手动往工程中导入源文件时导入在了不同的目录。
解决方法也很简单,在 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 编译标示。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2017-07-24 ionic 下拉选择框中默认显示传入的参数