我正在尝试使用一些用C编写的函数。但是我收到以下错误消息:
duplicate symbol _getInt in:
/Users/<redacted>/Library/Developer/Xcode/DerivedData/Test-ecbrpcljzanjildnvawnrcgejdwn/Build/Intermediates/Test.build/Debug-iphonesimulator/Test.build/Objects-normal/x86_64/source.o
/Users/<redacted>/Library/Developer/Xcode/DerivedData/Test-ecbrpcljzanjildnvawnrcgejdwn/Build/Intermediates/Test.build/Debug-iphonesimulator/Test.build/Objects-normal/x86_64/swift.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
swift.swift:
print(getInt())
header.h:
#ifndef header_h_
#define header_h_
#include "source.c"
#endif
由source.c:
int getInt() {
return 4;
}
答案 0 :(得分:1)
您的标头不得包含.c
文件。
.c
个文件应包含.h
个文件。
每个.c
文件都是自己的&#34;编译单元&#34;。编译器分别编译所有编译单元。您可以在source.h
中包含source.c
,以便标题用于在编译单元中提供函数实现的前向声明。
如果在source.c
中包含source.h
,那么包含source.h
(包括source.c
)的每个编译单元都将获得自己在{{1}中定义的实现的副本}}。这意味着会有相同内容的多个定义,编译器也不知道选择哪一个。这就是为什么你得到这个&#34;重复&#34;符号错误。我怀疑source.c
和swift.c
都包含source.c
。