Xcode重复符号链接错误

时间:2016-07-02 23:59:21

标签: objective-c xcode clang

我有文件" A.c"," A.h"和" B.h"," B.m" 。 我包括" A.h"在" A.c"和" B.h"。

然而,Xcode给了我许多重复符号的链接错误"找到。

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

如何编译我的程序?

A.H

#ifndef CPU_H_
#define CPU_H_
...
#endif

A.C

#include <stdio.h>
#include "A.h"
...

B.h

#import <Cocoa/Cocoa.h>
#import "A.h"
...

我在A.c和B.m中获得了在A.h中定义的变量的重复符号。

1 个答案:

答案 0 :(得分:2)

不要在头文件中定义全局变量。当你这样做时,你会得到重复的符号。

A.H

#ifndef CPU_H_
#define CPU_H_
...
unsigned char GlobalVariable = 'a'; // ERROR: Causes duplicates symbols.
...
#endif
包括

GlobalVariable(即直接复制到)A.c和B.m.这将创建相同符号的两个副本。因此,您会得到重复的符号。

要解决此问题,请仅在1 .c或.m文件中定义全局变量。然后你将安全地只有该标志的一个副本。现在,如何让B.h和B.m知道你的全球符号?这是通过在A.h中声明(注意:声明和定义不同)GlobalVariable来完成的。

A.H

#ifndef CPU_H_
#define CPU_H_
...
extern unsigned char GlobalVariable; // Declare GlobalVariable
...
#endif

A.C

#include <stdio.h>
#include "A.h"
...
unsigned char GlobalVariable = 'a'; // Define GlobalVariable