2009-07-10 5 views
0

Sur une boîte Linux de production sans outils de développement installés (par exemple, pas en-têtes, pas gcc) comment voulez-vous à déterminer si elle sera en mesure de execute choses:Comment détecter si je peux exécuter des exécutables compilés pour gcc4 sur une boîte?

  • compilé sous gcc4.1.2 par opposition à gcc3 .3.3 (il y avait un changement dans la version ELF entre 3 et 4 je crois)
  • compilé pour 64 bits contre 32 bits executables

nous avons des bibliothèques existantes pour que nous utilisons encore gcc3.3.3 mais sont passer à gcc4.1.2 et collègue essayait de comprendre comment détecter sur une nouvelle boîte à distance si nous pouvons exécuter des choses compilées avec gcc4. Puis-je vérifier la version spécifique des bibliothèques ou ld-linux.so ou quelque chose comme ça au lieu de compiler l'application de test avec gcc4, puis essayer de l'exécuter sur la nouvelle boîte?

Répondre

0

On dirait qu'il n'y a pas un moyen simple d'examiner la version de certaines bibliothèques pour déterminer si les binaires gcc4 fonctionneront sans problème.

Personnellement, je n'ai aucun problème avec l'exécution de l'un des contrôles mentionnés dans les autres réponses, mais je cherchais une façon statique de déterminer cela, afin que quelqu'un d'autre dans mon équipe puisse vérifier la boîte Linux sans me donner 30 minutes présentation sur comment linux devrait fonctionner ...

2

Le code généré doit fonctionner correctement. Vous pouvez essayer d'exécuter ldd, puisqu'il utilise l'éditeur de liens dynamique de la machine, vous pouvez voir si des bibliothèques sont manquantes.

+0

J'essaie de comprendre si la boîte est configurée pour exécuter des trucs compilés avec gcc4. Je suppose que vous suggérez de compiler l'application puis copiez-la dans la boîte à distance, puis lancez ldd dessus. C'est ce que je ferais normalement, mais j'essaie de comprendre s'il y a une autre façon simple de regarder les bibliothèques ou d'exécuter une commande ou quelque chose comme ça. Mais merci pour votre suggestion quand même. – stefanB

1

Je pense que les problèmes auxquels vous faites référence sont avec GNU ld et non gcc. Un nouvel algorithme de hachage a été ajouté pour la recherche de symbole. Vous devriez compiler tout avec -Wl, - hash-style = both ou -Wl, - hash-style = sysv (la valeur par défaut) dans gcc4 alors vous n'aurez aucun problème. De mémoire Redhat était la seule distro assez retardée pour activer le style de hachage gnu par défaut.

En effet, si tel est votre problème, vous pouvez dire en faisant:

objdump -t foo | grep ".hash"

Qui sera vide sauf si un hachage sysv est présent.

Questions connexes