Je suis nouveau sur Xcode et lorsque je crée le code suivant (un MWE), j'obtiens l'erreur suivante
ld: 3 symboles en double pour l'architecture x86_64 clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
J'ai trois fichiers comme suit;
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;
}
J'ai essayé différentes méthodes mentionnées sur le débordement de pile comme changer "Build Active Architecture Only" en "Yes" et quelques autres mais l'erreur persiste.
Le problème est que main.cpp
a inclus B.cpp
et A.cpp
. Dans votre processus de génération, vous compilez également B.cpp
et A.cpp
et essayant de lier B.o
et A.o
de même que main.o
.
Mise en relation B.o
et A.o
fait que les symboles display
et square
sont définis plusieurs fois. display
est défini 3 fois et square
est défini 2 fois.
Vous venez de compiler et de construire main.cpp
. Ne construisez pas A.cpp
et B.cpp
.
Second est que faire A.cpp
et B.cpp
à A.h
et B.h
et fonctions inline
. Ainsi, ils ne seront compilés qu'une seule fois.
Troisième façon, ne pas inclure B.cpp
dans main.cpp
. Mettez simplement la déclaration de fonction au lieu de l'inclusion.
//main.cpp
void square(int);
int main() {
square(5);
return 0;
}
Généralement, les déclarations de fonctions sont placées dans des fichiers d'en-tête. Si cela est nécessaire dans plusieurs cas, créez un fichier d'en-tête.
Pour moi, changer ' No Common Blocks ' de Yes à No (sous Targets-> Build Settings-> Apple LLVM - Code Generation) a résolu le problème.