Pourquoi ne peut-on pas exécuter un .o ?

Fermé
mariusb - 17 août 2011 à 11:03
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 août 2011 à 11:24
Bonjour à tous,

La question est dans le titre, étant supposé que je ne fais aucun appel extérieur dans le code source du .o (pas de #include), au quel cas l'édition de liens n'est pas nécessaire.

L'interrogation qui est derrière est : est-ce que la dernière étape d'une compilation gcc fait autre chose que l'édition de liens ? Si tel n'est pas le cas, je devrais pouvoir m'arrêter à l'étape 3 (assembling) et exécuter mon .o via une commande type ./monfichier.o

Voila,
merci à ceux qui pourront répondre.

ps : aucune urgence, il s'agit d'une question de pure curiosité.
ps2 (rien à voir avec la console de jeu) : J'ai bien pensé à faire un test, le terminal me dit qu'il n'est pas possible de lancer le fichier.
A voir également:

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 août 2011 à 11:24
Salut.
Oui, en effet l'édition des lien modifie un peu les fichiers et rajoute un en-tête particulier pour que ce soit un fichier exécutable. En plus, il me semble que par défaut tu lie toujours avec la libc. Un truc simple pour tester, tu supprimes (enfin, déplace ou renomme) tout les fichier lib*.a et *.so (sauf les .so nécessaires à gcc) de ton système et tu essais de compiler, tu verras ce qu'il manque.
Typiquement, à la fin de l'édition des liens, chaque fonction reçoit une adresse unique au sein du programme, alors que dans les .o c'est aranger autrement.
Tu peux aussi essayer de faire un petit diff entre un .o et la version exécutable. (regarde avec un éditeur hexadécimal)
0