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

Xcode C++ :: Duplicate Symbols for Architecture x86_64

本文关键字:符号 C++ 体系结构 x86 Xcode      更新时间:2023-10-16

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

LD:3 个重复的符号用于建筑x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我有三个文件如下;

主.cpp

#include "B.cpp"
int main() {
  square(5);
  return 0;
}

B.cpp

#include "A.cpp"
void square(int n){
  display(n*n);
}

答.cpp

#include <iostream>
using namespace std;
void display(int num){
  cout<<num;
}

我已经尝试了堆栈溢出中提到的不同方法,例如将"仅构建活动架构"更改为"是"和其他一些方法,但错误仍然存在。

问题是main.cpp包含了B.cppA.cpp。在构建过程中,您还需要编译B.cppA.cpp,并尝试将B.oA.omain.o链接。

链接B.oA.o会导致多次定义符号displaysquaredisplay定义 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;
}

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

对我来说

,将"无公共块"从"是"更改为"否"(在"目标->构建设置"-">Apple LLVM - 代码生成"下)解决了问题。

在此处输入图像描述