我是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;
}
我尝试了在堆栈溢出时提到的不同方法,例如将“仅构建活动架构”更改为“是”以及其他一些但错误仍然存在。
答案 0 :(得分:16)
问题是main.cpp
包含B.cpp
和A.cpp
。在您的构建过程中,您还要编译B.cpp
和A.cpp
并尝试将B.o
和A.o
与main.o
一起关联。
关联B.o
和A.o
会导致符号display
和square
多次定义。 display
定义了3次,square
定义了2次。
您只需编译并构建main.cpp
。不要构建A.cpp
和B.cpp
。
第二种方式是将A.cpp
和B.cpp
设为A.h
和B.h
以及功能inline
。所以,它们只会被编译一次。
第三种方式,请勿在{{1}}中加入B.cpp
。只需输入函数声明而不是包含。
main.cpp
通常,函数声明放在头文件中。如果在多种情况下需要,请创建一个头文件。
答案 1 :(得分:0)
对我来说,将“ 无通用块”从“是”更改为“否”(在“目标”->“构建设置”->“ Apple LLVM-代码生成”下)可以解决此问题。