2010-05-18 4 views
0

Je suis un peu nouveau sur MAC OS mais lors de la construction d'une application cpp sur MAC OS X, en utilisant g ++, je reçois une erreur étrange de l'éditeur de liens. D'abord en une seule étape Je crée une bibliothèque en utilisant plusieurs fichiers objets générés à partir de la source cpp, puis je crée une seule archive en utilisant la commande ar rvs.erreur de liaison sur MAC OS

Si je lie cette bibliothèque à une autre application cpp qui utilise certaines des classes fournies par la bibliothèque, elle ne parvient pas à récupérer certains symboles lors de la liaison et renvoie une erreur de symbole indéfinie.

Je sais et je suis capable de voir ces symboles dans la bibliothèque en utilisant nm. et la signature et la chaîne correspondent exactement à leur chemin dans le fichier.

Il existe de nombreux autres symboles, cette bibliothèque fournit et est reconnue au moment de la liaison.

l'option

utilisée pour relier sont

 g++-framework IOKit -framework Carbon -L <> -l<lib>-L -l<lib> -o exe ./obj.o 

et d'autres sont plusieurs chemins pour les autres libs utilisant -L

Je ne suis pas un expert sur MAC, mais toute suggestion des membres serait appréciable.

Merci d'avance

-brij

+0

Copiez et collez la ligne de commande actuelle et les messages d'erreur qui en résultent –

Répondre

0

Vous avez besoin de mettre les fichiers d'objet (obj.o) avant que les bibliothèques lors de la liaison. La raison en est que lors du traitement des objets, l'éditeur de liens conserve une liste des symboles indéfinis. Lorsqu'il traite une bibliothèque, il ajoute tous les symboles actuellement indéfinis qu'il trouve dans la bibliothèque (techniquement, cela fonctionne au niveau des objets de la bibliothèque). En plaçant les bibliothèques en premier, aucun symbole n'est indéfini lorsqu'elles sont traitées, donc aucun objet de la bibliothèque n'est ajouté.