J’ai le symbole en double _main.
Le problème est qu’il dit “Symbole en double _main dans /Users/…/i386/main-B9843B6026D6EFA4.o et /Users/…/i386/main-B9843B6026D6EFA4.o”, le XXX et le XXX sont en fait les mêmes. o fichier. Je ne sais pas pourquoi il pense que c’est un symbole en double quand c’est pareil.
Toute aide appréciée, merci.
Ah, je me rends compte que j’ai plusieurs entrées sous Cibles / Sources compilées (dans XCode plus récent, il s’agit des phases de compilation / sources de compilation). Je les ai enlevés et le problème est résolu. La saisie multiple a probablement un lien avec la fusion Git.
Il est apparu que dans mon cas, j’importais un fichier .m au lieu de son homologue .h. Résolu en éditant
#import "Tools.m"
dans
#import "Tools.h"
J’ai également eu ce problème et il a été causé par le code que j’ai importé d’un autre projet. J’ai fait un grep pour “int main” dans mon répertoire de projet:
grep -nr "int main" .
et trouvé
./main.m:13:int main(int argc, char *argv[]) ./IMPORTED_DIR/main.m:13:int main(int argc, char *argv[])
le fichier IMPORTED_DIR contenait le fichier principal supplémentaire qui causait l’erreur pour moi
J’ai retiré ce fichier du projet -> Cibles -> Construire les phases -> Comstackr la liste des sources, puis il a compilé
J’étais confronté au même problème en utilisant deux framework tiers. (AppLovin et Flurry) Et je suis arrivé à le savoir en supprimant “all_load” de “Autres Linker Flags” dans les parameters de construction.
J’ai eu le même problème en ouvrant un projet, créé avec Xcode 4.0.2, avec Xcode 4.1. Je me suis contenté de cliquer sur “Moderniser le projet” (Editeur / Moderniser le projet). Cette procédure supprime automatiquement tous les doublons.
Si vous avez toujours un problème, essayez de chercher comme ceci: “int main (” et supprimez ces fichiers sauf main.m
J’ai juste eu ce problème moi-même, mais après avoir lu la solution de huggie qui m’a mené sur la bonne voie, je suis resté un peu confus. Solution actuelle dans Xcode: Choisissez le projet, ciblez -> construisez les phases et cliquez sur Valider les parameters
Ensuite, Xcode corrigera automatiquement sa propre erreur. C’est toujours bien quand les outils essaient d’arrêter votre progression;)
Dans mon cas, j’ai déclaré un NSSsortingng dans mon fichier de constantes (importé par de nombreuses classes) mais j’ai oublié de le définir comme statique !!
par exemple NSSsortingng* PARAMS = @"paramA";
devrait être: static NSSsortingng* PARAMS = @"paramA";
La lecture du message d’erreur complet m’a permis de comprendre ceci: “Symbole en double PARAMS”. N’ayez pas peur et essayez de comprendre les messages d’erreur! Parfois, ils pourraient même vous dire exactement ce que vous avez fait de mal.
Vous pouvez aussi obtenir ceci pour les noms de méthode!
J’ai obtenu le duplicate symbol _runOnMainQueueWithoutDeadlocking
après avoir ajouté DBCamera via CocoaPods et c’était parce que ma catégorie sur NSObject (NSObject + Tools.h) et le fichier de dépendance GPUImage GPUImageOutput.m possédaient tous deux une méthode appelée runOnMainQueueWithoutDeadlocking.
J’ai eu la chance de pouvoir supprimer ma méthode du code car je ne l’utilisais plus ou nulle part ailleurs.
C’est probablement ce que je mérite pour mettre une catégorie sur NSObject.
Dans mon cas, j’avais importé un autre projet, afin d’utiliser une bibliothèque contenue à l’intérieur. Il en est résulté que mon projet avait deux fichiers main.m.
C’était encore plus déroutant, car l’erreur ne s’est manifestée que plusieurs fois plus tard.