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

我是Xcode的新手,当我构建下面的代码(MWE)时,出现以下错误

ld:体系结构x86_64的3个重复符号clang:error:linker命令失败,退出代码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;
}

我已经尝试过在堆栈溢出中提到的不同方法,例如将“仅将构建主动架构”更改为“是”等一些方法,但错误仍然存​​在。


问题是main.cpp包含了B.cppA.cpp 。 在你的构建过程中,你也在编译B.cppA.cpp并试图连接BoAo以及main.o

链接BoAo会导致符号displaysquare被多次定义。 display定义3次, square定义2次。

您只需编译并构建main.cpp 。 不要建立A.cppB.cpp

第二种方法是将A.cppB.cppAhBhinline 。 所以,它们只会被编译一次。

第三种方法,不要在main.cpp包含B.cpp 。 只需放入函数声明而不是包含。

//main.cpp

void square(int);

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

通常,函数声明放在头文件中。 如果这在多个情况下是必需的,则创建一个头文件。

链接地址: http://www.djcxy.com/p/86341.html

上一篇: Xcode C++ :: Duplicate Symbols for Architecture x86

下一篇: Why won’t this simple C++ code compile with clang++?