compilation croisée / liens AIX xlC C ++ ne pas trouver des symboles C
-
30-09-2019 - |
Question
Je tente de compilation croisée sur AIX avec les compilateurs xlc / xlc.
Le code compile avec succès quand il utilise les paramètres par défaut sur une autre machine. Le code fait compile avec succès 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), .Connecter (int, const sockaddr *, unsigned long), etc.
Je l'ai découvert que les symboles manquants sont de la bibliothèque standard C, libc.a. Quand je regardais les symboles avec nm pour la libc.a qui est ramassé, les symboles existent bel et bien. Je suppose qu'il pourrait y avoir un problème avec le C ++ est incapable de lire les objets C, mais je suis vraiment tournais dans l'obscurité.
La solution
Son comme il peut être un nom de C ++ problème mutiler.
Exécuter nm
sur l'objet de fichiers pour trouver les symboles qu'ils recherchent. Ensuite, comparez les noms exacts contre 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 la copie du système d'exploitation parent par erreur
Autres conseils
J'a finalement pu contourner ce problème. On dirait que j'utilisais le compilateur C ++ pour les fichiers .c. En utilisant le compilateur xlc au lieu du compilateur xlC pour les fichiers C fixe ce problème.