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

时间:2014-12-12 04:40:38

标签: c++ xcode xcode6 clang

我是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;
}

我尝试了在堆栈溢出时提到的不同方法,例如将“仅构建活动架构”更改为“是”以及其他一些但错误仍然存​​在。

2 个答案:

答案 0 :(得分:16)

问题是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。所以,它们只会被编译一次。

第三种方式,请勿在{{1​​}}中加入B.cpp。只需输入函数声明而不是包含。

main.cpp

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

答案 1 :(得分:0)

对我来说,将“ 无通用块”从“是”更改为“否”(在“目标”->“构建设置”->“ Apple LLVM-代码生成”下)可以解决此问题。

enter image description here