微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xcode C ::架构x86_64的重复符号

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

ld: 3 duplicate symbols for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)

我有三个文件如下;

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.cpp和A.cpp.在构建过程中,您还要编译B.cpp和A.cpp并尝试将B.o和A.o与main.o链接.

链接B.o和A.o会导致符号显示和方形被多次定义.显示定义3次,方形定义2次.

您只需编译并构建main.cpp.不要构建A.cpp和B.cpp.

第二种方法是将A.cpp和B.cpp设为A.h和B.h并使函数内联.因此,它们只会被编译一次.

第三种方式,不要在main.cpp中包含B.cpp.只是把函数声明而不是包含.

//main.cpp

void square(int);

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐