链接报错:ld: 1 duplicate symbol for architecture x86_64

duplicate symbols for architecture x86_64 错误 我的编译器是clion(基于xcode里面的环境),系统是mac,第一次写类的时候出现了这个错误 // // Created by apple on 2018/5/13. // #ifndef C_PRIMERPLUS_SALES_DATA_H #define C_PRIMERPLUS_SALES_DATA_H #include <iostream> //#include ... 阅读详情

一、问题原因

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.youkuaiyun.com/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");  
}  

Unity项目xLua升级与跨平台链接库编译指南 xLua是Unity热更新中实现Lua与C#互操作的核心桥接层,其本质是一套基于C++的原生链接库(如libxlua.so、xlua.dll)与自动生成的C#胶水代码(Gen)的组合体。工作原理依赖Unity ABI稳定性、IL2CPP符号导出规则及目标平台的原生编译约束。技术价值在于规避运行时反射开销、支持泛型/重载等高级特性,并保障iOS/Android/WebGL等多端一致性。典型应用场景包括手游热修复、TA脚本化工具链、QA自动化注入等对启动性能与平台兼容性敏感的工程实践。本文聚焦xLua版本升级过 阅读详情

相关推荐

iOS 集成 OpenSSL 1.0.2o 静态库:交叉编译与避坑指南

在 iOS 开发中,静态库与动态库的选择直接影响链接成功率。静态库通过把目标文件打包进最终二进制,能有效避免动态库分发时的符号缺失与架构不匹配问题。其原理是编译器按需提取符号、链接器解析依赖,因此架构切片和链接顺序至关重要。掌握交叉编译与 fat 库合并技术,可让一套库同时支持真机与模拟器,显著降低适配成本。典型应用场景包括 SDK 集成、音视频传输加密、网络层 TLS 握手及逆向分析。本文围绕 openssl-1.0.2o 静态库,从 libcrypto.a 与 libssl.a 的结构剖析、四架构交叉编

weixin_34234829的博客 419

【ios真机调试部分错误分析】

1.1duplicate symbols for architecture x86_64错误 分析错误原因: 仔细读一下报错原因可以发现几个关键词:“duplicate"和"symbols”。duplicate的中文意思是“重复的、复制的”,而symbols的意思是“符号”。也就是可能在你工程中引入了重复的东西。找到重复的文件,删除一份。 1.2 Reason: image not found 分...

zening1998的博客 684

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 429

ld: 1 duplicate symbol for architecture x86_64的错误

duplicate:重复的,复制的 symbols:符号 出现的原因: 1.工程中重复倒入某一类或文件,这一般出现在你添加第三方库的时候比较多,在不知道的情况下又导入了一次相同的类。 2.就是倒入类的时候,引用的是.m而不是.h 3.项目中用了一个 C 语言的枚举类型定义方式,会导致重复闯将 4.项目中使用c的时候,参数声明使用const 2 个人认为,因为const声明的是常量,static声明的是静态变量(只声明一次),所以我们在引用的时候,引用一次是没问题的,而引用多次,con

迦南的专栏 4481

unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」

水墨风格渲染 这次学校的比赛打算做一个中国古代背景的游戏,所以尝试做了水墨风格的渲染。 主要按以下四步来实现的效果: 根据色调和饱和度调整饱和度。 对图像进行模糊 水墨风格的物体边缘 物体内画笔笔触的模拟 接下来我分别就这四步依次展开说明: 调整饱和度 这里我使用Post-Processing Stack 的Color Grading 来调节饱和度,通过使用Grading Curv...

九级铁甲蛹的博客 1万+

复现基于PYNQ-Z2的手写数字识别卷积加速器设计

来源雪天鱼。

eachanm的博客 968

ios开发之duplicate symbol for architecture x86_64 错误

错误提示在我们开发ios中经常会遇到这样的一个错误提示: 查找原因分析通过xcode的给我们的提示能够看到这几个关键字:duplicate和symbols,通过有道翻译duplicate是重复、复制的意思,symbols是符号的意思,因此能够想到自己的工程中可能引入了重复的东西。解决问题        像这种错误信息,我总结了一下,有三种情况:1.在工程中重复倒入相同的文件       一般就是

dingqk的博客 5524

零基础入门生信转录组数据分析——导读

转录组数据分析(上游,下游,数据可视化)专栏的目录,可以直接通过点击各个分析点直接跳转到相关帖子,方便查找和观看

呆猪儿的博客 1万+

1 duplicate symbol for architecture x86_64

1. 拷贝文件时,两个文件有重复。 错误信息: duplicate symbol _kRefreshBoundary in:     /Users/jointsky/Library/Developer/Xcode/DerivedData/SearchPigeonWorld-eowxiueoysjuhsfcfhwittfroooe/Build/Intermediates/SearchPigeo

天道酬勤 1万+

基于逆向工程的中国裁判文书网爬虫技术深度解析

本文详细介绍了中国裁判文书网爬虫的开发过程,涵盖了从基础爬取到高级功能的完整解决方案。逆向工程分析:理解网站的反爬机制和加密逻辑浏览器自动化:使用Playwright模拟真实用户行为参数加密:通过JavaScript执行环境生成加密参数智能调度:控制请求频率,避免被检测错误处理:完善的异常处理和重试机制。

2201_76125261的博客 2144

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | YOLO26引入FDConv频率动态卷积改进,含FDC3k2二次创新,小目标检测,能够捕捉更加丰富和复杂的特征信息

本文提出了一种频率动态卷积(FDConv)模块,用于改进YOLO26目标检测模型的性能。FDConv通过在傅里叶域内划分参数预算,构建具有频率多样性的权重,有效提升了模型对低频和高频信息的处理能力。该模块包含内核空间调制(KSM)和频率带调制(FBM)两个关键组件,分别实现空间级和频域级的动态调节。实验表明,FDConv仅增加3.6M参数就能超越其他需要大幅增加参数的方法,并在目标检测、实例分割等任务中表现优异。文章详细介绍了FDConv的原理、实现方法及在YOLO26中的集成方式,提供了完整的代码实现。

Ai缝合怪、助力小伙伴高效发论文 248

xcode上编译c语言程序报错:ld: x duplicate symbol for architecture x86_64 clang: error: linker command failed w

【主要内容:】 1. 错误提示 2. 分析错误原因 3. 解决问题办法 一、错误提示 在我们写代码过程中可能会经常遇到这样一个错误: [objc] view plain copy print? "font-size:32px;color:#ff0000;">ld: 4 duplicate symbols fo

xcp_123的博客 4126

PINN物理信息网络 | 物理信息硬约束下的混合专家训练框架

PINN物理信息网络 | 物理信息硬约束下的混合专家训练框架

算法如诗的博客 879

xcode编译时候出现clang: error: linker command failed with exit code 1 (use -v to see invocation)的解决方法

昨天遇到的小问题,但觉得发生这种问题的几率应该是挺大的,所以贴出来可能可以帮助到别人 比较具体一点的问题描述是出现: ld: 1 duplicate symbol for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) 解决方法:

从很弱很弱做起 2807

GEE:变异系数法在遥感影像分析中的应用及权重计算

本文介绍了在Google Earth Engine(GEE)平台上基于变异系数法的多指标加权遥感影像分析方法。该方法通过计算每个指标的平均值和标准差,进而计算变异系数来评估指标的变化程度。利用变异系数,我们可以计算每个指标的权重,并将其应用于加权和指数的计算,从而提高遥感影像分析的准确性和可靠性。方法应用于计算Risk-Screening Environmental Indicators (RSEI),并以此为例。

养乐多的博客 2270

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS开发实战:解决第三方SDK重复符号链接错误完整指南

在软件开发中,链接器负责将编译后的目标文件和库合并生成可执行程序。当多个库定义了相同名称的函数或全局变量时,就会发生重复符号错误,导致构建失败。这一原理在iOS开发中尤为关键,因为静态库的全量链接特性使得第三方SDK极易发生冲突,严重影响应用打包和交付效率。通过理解符号解析机制和静态库的链接行为,开发者可以系统性地解决依赖冲突问题,提升工程稳定性。本文以微信支付SDK集成和UniApp跨平台开发为典型场景,深入剖析了重复符号错误的根源,并提供了从问题定位到依赖重构的完整实战方案,帮助开发者高效管理复杂项目依

weixin_34033624的博客 311

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

COLMAP GPU加速实战:从编译到稠密重建的全链路优化

COLMAP作为主流SfM/MVS三维重建框架,其默认CPU执行模式在高分辨率、大批量图像场景下性能严重受限。理解其底层计算模型——特征提取、匹配与深度图估计的并行化瓶颈——是释放GPU算力的前提。CUDA加速并非简单启用开关,而需匹配CUDA Toolkit与CUDNN版本、精准控制nvcc编译行为、重构任务调度逻辑,并针对PatchMatch Stereo等核心模块进行显存与线程级调优。实际工程中,通过启用--SiftExtraction.use_gpu、vocab_tree_matcher GPU几何

weixin_34239592的博客 263

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

做php适配信创的过程中会遇到的所有问题。很细很细

qq_37805832的博客 551

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

ld: 1 duplicate symbol for architecture x86_64 clang:

xcode错误 duplicate symbol '_main' in: /Users/mac/Library/Developer/Xcode/DerivedData/Day01-OC基础语法-gmcvdmyzlhmhywchsmufrxpalxnj/Build/Intermediates.noindex/Day01-OC基础语法.build/Debug/Day01-OC基础语法.build/Objects-normal/x86_64/main.o /Users/mac/Library/De

weixin_45363671的博客 326

1-duplicate-symbol-for-architecture-arm64

第一种情况 重复导入文件 说白了就是同一个文件名导入了多次 根据提示去重即可 常见于导入第三方库或者复制其他项目文件 第二种情况 看看文件是否丢失 第三种情况 #import头文件的时候,不小心把.h写成了.m 第四种情况 有相同名称的 C 函数 根据提示找到.m或者.h改名字或者删除方法 举个例子 char pinyinFirstLetter(unsigned short hanzi) { int index = hanzi - HANZI_START; if (index >= 0 &

会装系统的程序员 1995

iOS开发之duplicate symbols for architecture x86_64错误

一、错误提示 在我们写代码过程中可能会经常遇到这样一个错误: 1.duplicatesymbolsforarchitecturex86_64 2.clang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation) 二、分析错误原因 仔细读一下报错原因可以发现几个关键词...

weixin_34038293的博客 575

iOS开发 - OC - duplicate symbol _OBJC / undefind symbol 错误的相关处理

前言: 作为一个iOS开发,相信大家都会遇到类似于 “duplicate symbol” 的程序报错。 对于很多新手来说,可能会有点手足无措,因为这种类型的报错一般并非是代码的逻辑错误,大部分情况下是在编译过程出错导致的,因此相对来说排查不易。在前几天,我在引用了两个SDK的过程中出现了这个问题,运用不同的手段最终解决了这个问题。今天本文就这个错误进行一个详细的分析以及如何处...

a26579424的博客 563

ld:1 duplicate symbol for architecture x86_64

项目引用.c ,报错 1 duplicate symbol for architecture x86_64 解决办法: 选中.c文件,在右侧出现的选项栏里,取消选中Target Membership的选项。

u012477117的专栏 378

C语言学习记录01- Mac CLion环境中同一项目中如何新增源文件

通过查阅各路资料,发现问题应该是clion每一个项目中,有且只有一个main()函数。(在CLion中,其实是一个add_extcutable()中有且只能有一个main()函数。通过阅读错误提示,得知add_excutable(Pref. name.c) 即“Pref.”这个前缀不可重复。更改add_excutable(前缀 name.c)函数中的前缀。进入项目中的CMakeLists.txt,新增add_excutable()函数。使用Clion时,在已有项目中新建一个c源文件,运行提示报错。

hmq_555的博客 938

C++ 编译错误:ld: 4 duplicate symbols for architecture x86_64

duplicate symbols : 网上查询解决方法,大多数说是把.cpp当做头文件include进来了,这种情况确实会引起 duplicate symbols 错误,但是也要注意,除了这种情况,还有下面这种情况也会引起: 假设一个C++项目有4个文件,分别是 a.h, b.h, b.cpp, main.cpp a.h 头文件声明并定义了类以及其成员; b.h 导入了a.h,且b.cpp中实现了b.h中声明的类及其成员函数; main.cpp 导入 b.h; (1)在使用命令 g++ main

wangxiaosu的专栏 3774
上一篇: Q146:PBRT-V3,对系统进行拓展(以添加一个新的Integrator为例)
下一篇: In C++, what is a memory arena?
图形跟班
博客等级 码龄16年 940粉丝 307原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值