2009-02-17 8 views
1

Existe-t-il un site où je peux trouver les symboles utilisés dans une bibliothèque particulière et sa version. Par exemple. Je suis en train de compiler un code sur AIX en utilisant gcc, et il me jette beaucoup d'erreurs de symboles non définis Par exemple, voici une sortie:Aide sur la compilation sous AIX

ld: 0711-317 ERROR: Undefined symbol: .__fixdfdi 
ld: 0711-317 ERROR: Undefined symbol: .__divdi3 
ld: 0711-317 ERROR: Undefined symbol: .__moddi3 
ld: 0711-317 ERROR: Undefined symbol: .__floatdidf 
ld: 0711-317 ERROR: Undefined symbol: .__umoddi3 
ld: 0711-317 ERROR: Undefined symbol: .__udivdi3 
ld: 0711-317 ERROR: Undefined symbol: .__fixunsdfdi 

Où puis-je trouver où ces symboles sont. Si j'exécute la même commande gcc sous Linux, cela fonctionne correctement.

J'ai essayé, y compris -lgcc aussi, mais là encore, il jette des symboles non définis pour certains register_frame ... bla bla ... et je ne suis pas tomber malade d'AIX.

Toute aide à ce sujet serait appréciée .. et s'il vous plaît ne dérange pas Google sur ce problème. Vous ne finirez pas où.

Beaucoup ont posé ce genre de questions mais pas de réponses.

Merci

Répondre

1

Il a été longtemps que je tout compilé sur AIX (heureusement) et je ne ressens votre douleur après avoir passé une bonne année ou essayer d'obtenir la JNI de notre société et d'autres bibliothèques de logiciels construits sur AIX.

Je crois me souvenir que GCC n'a jamais très bien fonctionné car il a toujours été confronté à des erreurs similaires. Y at-il une option pour utiliser le compilateur natif (xlC)?

A défaut que je voudrais vérifier l'ordre de vos bibliothèques, il joue un grand rôle pour faire travailler les choses correctement ..

Je suppose que vous avez utiliser nm utilitaire pour parcourir toutes les bibliothèques dans/usr/lib (etc) pour trouver où se trouvent les symboles manquants?

0

des questions: La plupart du temps

  • Quelle version de GCC?
  • Quelle version d'AIX êtes-vous?
  • Quelle version d'AIX a été conçue pour votre copie de GCC?
  • Quelle est exactement la ligne de liaison que vous utilisez?

J'ai vu ce genre d'erreur lors de l'utilisation d'une version de GCC compilée sur une version basse d'AIX. Par exemple, si le GCC a été compilé pour AIX 4.3.3 et est en cours d'exécution sur AIX 5.x. Habituellement, si GCC a été compilé sur une version améliorée d'AIX, il ne fonctionnera pas sur la version basse, donc il est peu probable que ce soit le problème.

Une autre possibilité (plutôt improbable): votre GCC est-il installé là où il a été compilé pour pouvoir être installé? Lorsque vous le créez, vous spécifiez (éventuellement implicitement) l'emplacement d'installation (par défaut, sous /usr/local). Si vous avez installé votre copie ailleurs, mais qu'il existe un ancien GCC dans /usr/local et que votre copie doit être installée dans /usr/local, vous pouvez rencontrer ce type de problème. C'est beaucoup moins probable que la non-concordance de version.

1

Ce sont des symboles mathématiques. Essayez d'ajouter -lm à votre ligne de lien.

1

C'est parce que vous avez utilisé le gccpour compiler une bibliothèque que vous souhaitez créer un lien vers un code compilé avec xlc. Ou du moins est mon cas

Vous avez 2 options:

  1. utiliser la xlc au lieu de gcc pour toute la compilation (ne pas mélanger gcc et xlc)
  2. compilation avec xlc mais appelant également la bibliothèques gcc, par exemple:
sudo find/-name libgcc.a 
/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/libgcc.a 

/opt/IBM/xlC/13.1.0/bin/xlC -g -o MyBIN MyBIN.o -L/usr/etctera - 
L/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/ -lgcc -letcetera 
Questions connexes