链接器错误 - 目标 C
Posted
技术标签:
【中文标题】链接器错误 - 目标 C【英文标题】:Linker Error - Objective C 【发布时间】:2013-03-24 20:23:01 【问题描述】:当我尝试从文件“VAMenuScreenViewController”导入文件“VARendererViewController.h”时发生此错误
duplicate symbol _gestureMinimumTranslation in:
/Users/Sam/Library/Developer/Xcode/DerivedData/Virtual_Human_Avatar-fwgdkxpnkzapxrdzkggtmbnfhjwb/Build/Intermediates/Virtual Human Avatar.build/Debug-iphonesimulator/Virtual Human Avatar.build/Objects-normal/i386/VARendererViewController.o
/Users/Sam/Library/Developer/Xcode/DerivedData/Virtual_Human_Avatar-fwgdkxpnkzapxrdzkggtmbnfhjwb/Build/Intermediates/Virtual Human Avatar.build/Debug-iphonesimulator/Virtual Human Avatar.build/Objects-normal/i386/VAMenuScreenViewController.o
ld:架构 i386 的 1 个重复符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
谁能给我一些
【问题讨论】:
gestureMinimumTranslation 是如何声明的?听起来您刚刚在标头中定义了常量,但它应该在标头中声明为“extern”并在源文件中定义。 【参考方案1】:您有两个编译单元——两个源文件——定义了相同的符号。
这可能是因为您在两个单独的 .m 文件(或其他编译单元;.c、.mm 等)中定义了符号,或者因为您在头文件中定义了符号并将其导入到这两个文件中文件。或者,如果您将变量声明推入没有extern
的头文件中,那么它将导致在导入它的每个.m
文件中创建一个具有该名称的符号。
假设gestureMinimumTranslation
是一个变量,那么如果你真的想要一个全局变量,那么只需要一个.m文件定义如下:
int gestureMinimumTranslation;
然后,在相应的标题中:
extern int gestureMinimumTranslation;
other .m
文件应该导入上面的标题。
【讨论】:
【参考方案2】:链接器正在尝试用一个公共符号连接一组对象。当Compile Sources
Build Phase
有重复的条目或头文件时,通常会发生这种情况。尝试删除这些。
【讨论】:
如果是这种情况,错误会有所不同。这看起来是跨两个实现文件的简单重复符号声明。以上是关于链接器错误 - 目标 C的主要内容,如果未能解决你的问题,请参考以下文章