一、问题原因

ld: 1 duplicate symbol for architecture x86_64
出现错误的原因是:重复定义

完整的报错信息:
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
即:在链接阶段,发现“重复定义”。

问题原因:
在.h文件中定义实现了“非内联的”“独立函数”。

这种情况下,该.h文件每被include一次,其中的“非内联的”“独立函数”都会被定义实现一次,所以就“重复定义”。
这也是解释了:“重复定义”为什么没有在“编译阶段”报错,而是等到“链接阶段”才报错。

如果这个独立函数是内联的,由于是在被调用处直接展开,所以不会有“重复定义”的问题。

对了,所谓“独立函数”是指“不是某个类的成员方法的那些‘游离’函数”

二、解决方式

将“非内联的”“独立函数”的定义实现从.h文件挪到.cpp文件,然后在.h文件中对该函数进行声明。

三、举例

四、其他参考

http://blog.csdn.net/u010282836/article/details/25954997

这篇文章中提到的另一种情况:
include了.c文件。

我X,“include了.c文件”?怎么会有这种人?
anyway,原理是一样的,即“非内联的”“独立函数”被重复定义了。

文章内容贴于后文。


最近使用Xcode编译C语言程序,发现在多文件运行时总会有error提示:

ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)  

在网上查了一下:
duplicate symbol的大概意思是,编译器认为你重复定义了一些东西。
linker command failed with exit code 1,则可能是项目引入了多个相同的文件
解决方法:
先看看main.c文件是不是包含了自己写的.c文件,例如:

#include "addressPrint.c"  

如果是,删除该语句,使用到自定义文件的函数前声明一下,ok。

void  print1(int *ptr,int rows);  int main(int argc, const char * argv[])
{  // insert code here...  printf("Hello, World!\n");  int one[] = {0,1,2,3,4};  print1(one, 5);  return 0;
}  

编译器会自动找到在addressPrint.c文件里的方法:

void print1(int *ptr,int rows){  /* print out a one-dimensional array using a pointer */  int i;  printf("Address Contents\n");  for (i=0; i<rows; i++) {  printf("%8u%5d\n",ptr + i,*(ptr + i));  }  printf("\n");
}  

链接报错:ld: 1 duplicate symbol for architecture x86_64相关推荐

  1. error===ld: 2 duplicate symbols for architecture x86_64

    一,经历 1> 出现了以下错误,感觉像是GiftAnimationView文件的问题 /Users/liuzhu/Library/Developer/Xcode/DerivedData/test ...

  2. iOS ld:2 duplicate symbols for architecture arm64 clang:error:linker commang failed with exit ...

    当我们运行程序 .修改代码.或者添加第三方或者SDK的时候经常会出现下面的问题 ld:2 duplicate symbols for architecture arm64 clang:error:li ...

  3. 15、iOS开发之duplicate symbols for architecture x86_64错误

    1. 错误提示 2. 分析错误原因 3. 解决问题办法 一.错误提示 在我们写代码过程中可能会经常遇到这样一个错误: [objc] view plaincopy print? <span sty ...

  4. 芒果iOS开发之duplicate symbols for architecture x86_64错误

    [主要内容:] 1. 错误提示 2.分析错误原因 3. 解决问题办法 一.错误提示 在我们写代码过程中可能会经常遇到这样一个错误: <span style="font-size:32p ...

  5. xshell进行ssh链接报错“所选的用户密钥未在远程主机上注册”处理

    xshell进行ssh链接报错"所选的用户密钥未在远程主机上注册"处理 一.报错情况 二.控制台登录主机 三.解决步骤 1.重新生成公私钥 2./root/.ssh/authori ...

  6. VS Code远程链接报错Could not establish connection to “hz-t2.matpool.com”

    VS Code远程链接报错Could not establish connection to "hz-t2.matpool.com" 输出的部分内容 ## 解决方法1 git fo ...

  7. iOS报错:108 duplicate symbols for architecture arm64

    报错: 108 duplicate symbols for architecture arm64 由于项目中导入了相同的.a文件造成,删除掉多余的保留一个就行了.

  8. iOS开发-编译出错 duplicate symbols for architecture x86_64

    今天对原来项目文件进行重新整理,根据文件内容进行分类,结果复制粘贴时没注意把一个文件复制了两遍 编译的时候就出现Duplicate Symbol Error 在网上搜素了一圈发现也有人遇到过这个问题, ...

  9. 【Linux动态库.so/ELF文件】链接报错:/usr/bin/ld: 当搜索用于 .//libzlog.so 时跳过不兼容的 -lzlog

    已解决. 已经使用arm交叉编译工具链,出现了新的问题,原来正常的zmq出现了不可识别的格式错误: 查看软连接是否存在,发现只有一份zmq,复制两份zmq后,重新编译恢复正常: 编译成功. 但是查看该 ...

最新文章

  1. RHEL7.0系统相关配置
  2. ECharts的点击事件
  3. SBT模版(Size Balanced Tree)
  4. UVA 1329——Corporative Network
  5. 构建电商网站业务安全系统,防止“薅羊毛”
  6. 如何查看Windows 10的具体版本号?
  7. 业务类型创业公司,最好不要招程序员
  8. mysql基础之查询缓存、存储引擎
  9. 文件流操作,报“because it is being used by another process. ”错误解决
  10. 云电脑搭配量子计算机,量子计算机和量子模拟器
  11. 批量修改文件夹名称的一部分
  12. DDR3内存频率标识对应
  13. CSS为字体添加过度色
  14. ie浏览器的标准模式与怪异模式的设置与区分方法
  15. Windows 7/10下安装Ubuntu 16.04双系统
  16. 建服务器数据中心,如何构建一个服务器数据中心
  17. 在传统软件公司十年深恶痛绝的感受(转)
  18. 学习信号量 sem_init、sem_destroy、sem_post、sem_wait、sem_trywait、sem_getvalue
  19. Linux报错 tar: Error Is Not Recoverable: Exiting Now
  20. Linux进程中有xorg,linux – Xorg如何工作?

热门文章

  1. express 学习记录
  2. 关于在ItemAdding时获取“用户和用户组”这个栏的值
  3. 栈的亚特兰数与二叉树的前序中序遍历序列
  4. python读取XML中bndbox和object name的方法
  5. Linux-iptables初识
  6. Angularjs-项目搭建
  7. VMware View 要求操作句柄的状态错误
  8. Android token使用
  9. 笔记本显示器坏了,从硬盘安装win7系统
  10. OpenMP模式下多线程文件操作 (转)