2010-04-21 6 views
1

Je tente de compilation croisée sur AIX avec les compilateurs xlc/de xlc.compilation croisée/liens AIX xlC pour ne pas trouver C++ symboles C

Le code compile avec succès quand il utilise les paramètres par défaut sur une autre machine. Le code compile effectivement avec la compilation croisée, mais le problème vient de l'éditeur de liens. Ceci est la commande qui relie les objets ensemble:

$(CHILD_OS)/usr/vacpp/bin/xlC -q32 -qnolib -brtl -o $(EXECUTABLE) $(OBJECT_FILES) 
-L$(CHILD_OS)/usr/lib 
-L$(CHILD_OS)/usr/vacpp/lib/profiled 
-L$(CHILD_OS)/usr/vacpp/lib 
-L$(CHILD_OS)/usr/vac/lib 
-L$(CHILD_OS)/usr/lib 
-lc -lC -lnsl -lpthread 
-F$(CHILD_OS)$(CUSTOM_CONFIG_FILE_LOCATION) 

Lorsque je tente de lier le code, je reçois plusieurs symboles non définis: .setsockopt (int, int, int, const void *, unsigned long),. socket (int, int, int), .connect (int, const sockaddr *, unsigned long), etc.

J'ai découvert que les symboles manquants proviennent de la bibliothèque c standard, libc.a. Quand j'ai recherché les symboles avec nm pour la libc.a qui est en train d'être récupérée, les symboles existent bel et bien. Je devine qu'il pourrait y avoir un problème avec le C++ étant incapable de lire les objets C, mais je tire vraiment dans l'obscurité.

Répondre

1

son comme il peut être un nom de C++ problème mutiler.

Run nm sur les fichiers objets pour connaître les symboles qu'ils recherchent. Puis comparez les noms exacts avec les bibliothèques.

Vérifiez ensuite les commandes de compilation, pour faire en sorte que la bonne version des fichiers d'en-tête est inclus - peut-être est compris le parent de copie de Mac OS par erreur?

+0

Je doute que les fichiers d'en-tête du parent OS sont inclus (-qnolib et -qnostdinc sont équivalentes pour xlc/xlC). J'ai exécuté nm contre libc.a sous les répertoires de bibliothèque inclus et tous les symboles ont été trouvés. Bonnes suggestions, malheureusement, déjà essayé. – bogertron

+0

Je suggère d'exécuter nm sur les fichiers objet, pour trouver les vrais symboles qui sont recherchés - ceux listés par xlc ressemblent aux versions démolies des références C++. –

0

J'ai finalement réussi à contourner cela. Il semble que j'utilisais le compilateur C++ pour les fichiers .c. L'utilisation du compilateur xlc au lieu du compilateur xlC pour les fichiers C a résolu ce problème.

Questions connexes