我是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;
}
通常,函数声明放在头文件中.如果在多种情况下需要,请创建一个头文件.
原文地址:https://codeday.me/bug/20191006/1861884.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。