Xcode C++ :体系结构x86_64的重复符号

ecr0jaav  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(250)

我是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”和其他一些方法,但错误仍然存在。

mfuanj7w

mfuanj7w1#

问题是main.cpp已经包含了B.cppA.cpp。在您的构建过程中,您还在编译B.cppA.cpp,并试图将B.oA.omain.o一起链接。
链接B.oA.o会导致符号displaysquare被定义多次。display被定义3次,square被定义2次。
您只需编译并生成main.cpp,而不要生成A.cppB.cpp

第二种方法是将A.cppB.cpp转换为A.hB.h以及函数inline。因此,它们只编译一次。
第三种方法,不要在main.cpp中包含B.cpp。只需使用函数声明而不是包含。

//main.cpp

void square(int);

int main() {
  square(5);
  return 0;
}

通常,函数声明放在头文件中。如果在很多情况下都需要这样做,那么就创建一个头文件。

hyrbngr7

hyrbngr72#

对我来说,将“No Common Blocks”从“Yes”更改为“No”(在目标-〉构建设置-〉Apple LLVM -代码生成下)修复了这个问题。
enter image description here

相关问题