iOS开发之duplicate symbols for architecture x86_64错误

iOS开发之duplicate symbols for architecture x86_64错误

【主要内容:】

 

1. 错误提示

2. 分析错误原因

3. 解决问题办法

 

 

 

一、错误提示

 

在我们写代码过程中可能会经常遇到这样一个错误:

 

[objc] 
view plain  
copy

 

  1. <span style=“font-size:32px;color:#ff0000;”>ld: 4 duplicate symbols for architecture x86_64  
  2. clang: error: linker command failed with exit code 1 (use -v to see invocation)</span>  

 

如图:

iOS开发之duplicate symbols for architecture x86_64错误

 

 

 

二、分析错误原因

仔细读一下报错原因可以发现几个关键词:”duplicate”和”symbols”。

duplicate的中文意思是“重复的、复制的”,而symbols的意思是“符号”。也就是可能在你工程中引入了重复的东西。

 

 

 

三、解决问题办法

 

我总结了一下,出现duplicate出这个错误一般有三种情况:

 

3.1 重复导入相同的文件

   第一种情况:在工程中重复导入了某一个类或文件,这一般出现在你添加第三方库的时候比较多,在不知道的情况下又导入了一次相同的类。

   下图中我在工程中新建了一个src的文件夹,把Person类又复制了一遍又添加到工程中去,如图:

iOS开发之duplicate symbols for architecture x86_64错误

 

这个时候command + B编译之后出现如下错误:

iOS开发之duplicate symbols for architecture x86_64错误

 

 可以看出来报的还是duplicate的错误,虽然duplicate前边的数字可能不太准确,可是只要你看到duplicate这个关键字就可以去你工程中查找是不是有重复的东西被导入。

 

 

3.2 #import “XXX.h” 写成了#import “XXX.m”

  第二种情况:工程中在#import引入头文件的时候,将#import “XXX.h” 写成了#import “XXX.m”。错误的引入.m头文件 

我工程中有一个Person的类,然后我想在main函数中初始化一个对象,这个时候需要先引入Person类的.h文件。这个时候我引入了.m文件,如图:

iOS开发之duplicate symbols for architecture x86_64错误

    command + B 编译之后发现错误,如图:

iOS开发之duplicate symbols for architecture x86_64错误

你会发现还是duplicate这个错误。

 

 

 

3.3 在多个文件中重复定义某个东西

 

这个是由网友提供,错误原因如下:在两个文件中定义了相同的枚举,造成了deplicate的错误。

 

目前我只发现这三种操作会带来这个问题,其他的如果还会带来这个问题,欢迎大家提出来,帮我不断完善博客。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101673.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【《春娇与志明》:贱也要在一起 】-百度影集http://www.baidumovies.com

    【《春娇与志明》:贱也要在一起 】-百度影集http://www.baidumovies.com

    2021年8月17日
    60
  • 进程管理之进程调度「建议收藏」

    进程管理之进程调度「建议收藏」文章目录一、进程调度基础1、进程调度定义2、进程调度目标二、基本调度算法1、先来先服务算法2、时间片轮转算法3、短任务优先算法4、优先级调度算法5、混合调度算法  在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态。那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理…

    2022年9月29日
    3
  • 关于Random.nextInt()方法详解「建议收藏」

    关于Random.nextInt()方法详解「建议收藏」博主在阅读>这本书时,发现其中有一个使用Random.readInt()的示例,便在idea上敲着看。发现运行结果与书上的一模一样。不禁让我好奇了起来。如下图:                 如果你也照着敲了一遍的话,我相信结果如下:                  问题来了!random.read

    2022年7月22日
    8
  • c语言基础题库及详解答案_char和uint8

    c语言基础题库及详解答案_char和uint8uint32_t是一个32位的无符号整型。使用这个类型需要加上头文件#include<stdint.h>unsignedint32_t是错误的写法。%x是以16进制的形式来输出例子:我有一个32位的无符号整型的数,我想知道高16位和低16位相加的和是多少,结果以16进制输出?#include<stdio.h>#include<stdlib.h>#include<stdint.h>intmain(){uint3

    2025年8月27日
    8
  • mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法「建议收藏」

    mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法「建议收藏」MySQL可应用于多种语言,包括PERL,C,C++,JAVA和PHP。在这些语言中,MySQL在PHP的web开发中是应用最广泛。大家知道mysql如何分区的吗?下面由学习啦小编为大家整理的mysql分区的方法,希望大家喜欢!mysql分区的方法一、概述当MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性能下降>的比率不一而同…

    2022年5月31日
    40
  • mysql useradd_useradd 创建用户

    mysql useradd_useradd 创建用户useradd创建用户1.命令功能useradd创建一个新用户或者更改默认新用户信息。2.语法格式useraddoptionusernameuseradd-Doption参数选项选项选项说明-c新用户passwd文件中的说明栏(冒号分割第5栏)-d新用户的登录时的家目录-e用户被禁用时间。零时账号日期YYYY-MM-DD格式。-g指定用户对应组,用户组必须为系统现有组名称。-…

    2025年8月6日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号