2010-07-14 6 views
0

Je construis un projet C++ en XCode qui utilise deux bibliothèques. Dites par exemple libX.a et libY.a. Il y a quelques définitions de fonctions communes sur libX.a et libY.a pour lesquelles j'obtiens une erreur de lien de symbole en double.Comment obtenir toutes les erreurs d'éditeur de liens de symboles en même temps?

C'est bien, mais je reçois une seule erreur à la fois. Une fois que j'aurai corrigé l'erreur, j'obtiendrai la prochaine erreur de symbole en double et ce processus se répètera.

J'ai deux problèmes avec cette approche:

  1. Je n'ai pas un compte exact du nombre d'erreurs en double. Je voulais connaître tous les symboles en double trouvés. Alors que je peux distribuer la réparation de cela entre deux développeurs.

  2. La résolution de l'erreur est assez rapide par rapport au temps nécessaire pour construire les bibliothèques, puis lier pour générer l'exécutable.

Est-ce possible? Je veux dire est-il possible en définissant un drapeau de sorte que l'éditeur de liens donne tous les symboles en double à la fois.

EDIT: ajout d'un exemple de code pour la clarification: Permettez-moi de montrer un exemple ici:

test1.h

void foo() 
{ 
} 

void bar() 
{ 
} 

test2.h

void foo() 
{ 
} 

void bar() 
{ 
} 

test1.cpp

#include "test1.h" 

void j() 
{ 
    foo(); 
    bar(); 
} 

test2.cpp

#include "test2.h" 

void k() 
{ 
    foo(); 
    bar(); 
} 

maintenant Compiler:

g++ -c test1.cpp 
g++ -c test2.cpp 

Lier maintenant:

g++ -o final test1.o test2.o 

Même si il y a deux symboles en double foo et bar, je reçois l'erreur que pour foo comme montré ci-dessous:

ld: duplicate symbol foo() in test2.o and test1.o 
collect2: ld returned 1 exit status 

Une fois que je fixe foo, puis-je obtenir l'erreur pour la barre ci-dessous:

ld: duplicate symbol bar() in test2.o and test1.o 
collect2: ld returned 1 exit status 

Ce que je voudrais est l'obtention de ces deux erreurs à la fois. Alors que je les répare tous, puis relier en un seul coup.

Merci

Cordialement, Marc

+0

Je ne connais pas Xcode, mais l'éditeur de liens GNU, lorsqu'il est exécuté à partir de la ligne de commande, répertorie normalement tous les symboles en double - aucun commutateur supplémentaire n'est nécessaire. –

Répondre

3

Vous pouvez utiliser la commande nm pour lister tous les symboles dans les bibliothèques, et de trier et uniq -d pour imprimer les doublons. Quelque chose comme:

nm -j test1.o test2.o | sort | uniq -d 

Ceci énumérera également les symboles indéfinis qu'ils partagent en commun.Vous pouvez obtenir une liste de ceux avec nm -u.

Un peu un hack, mais il pourrait vous y arriver plus rapidement.

+0

merci beaucoup :) qui a aidé – Mark