我是Xcode的新手,当我构建以下代码(MWE)时,我收到以下错误
ld:x86_64体系结构的3个重复符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我有三个文件如下:
main.cpp
#include "B.cpp"
int main() {
square(5);
return 0;
}
B.cpp
#include "A.cpp"
void square(int n){
display(n*n);
}
A.cpp
#include <iostream>
using namespace std;
void display(int num){
cout<<num;
}
我已经尝试了堆栈溢出的不同方法,如将“Build Active Architecture Only”更改为“Yes”和其他一些方法,但错误仍然存在。
2条答案
按热度按时间mfuanj7w1#
问题是
main.cpp
已经包含了B.cpp
和A.cpp
。在您的构建过程中,您还在编译B.cpp
和A.cpp
,并试图将B.o
和A.o
与main.o
一起链接。链接
B.o
和A.o
会导致符号display
和square
被定义多次。display
被定义3次,square
被定义2次。您只需编译并生成
main.cpp
,而不要生成A.cpp
和B.cpp
。第二种方法是将
A.cpp
和B.cpp
转换为A.h
和B.h
以及函数inline
。因此,它们只编译一次。第三种方法,不要在
main.cpp
中包含B.cpp
。只需使用函数声明而不是包含。通常,函数声明放在头文件中。如果在很多情况下都需要这样做,那么就创建一个头文件。
hyrbngr72#
对我来说,将“No Common Blocks”从“Yes”更改为“No”(在目标-〉构建设置-〉Apple LLVM -代码生成下)修复了这个问题。
enter image description here