J'aimerais construire avec un programme un fichier a.out. Cela marche
impec sur x86, mais cela ne semble pas marcher sur AMD64. Il s'agit
d'un 2.6.8 Debian qui est pourtant compilé avec le support du a.out
dans l'émulation IA32. Je génère bien du code 32 bits (puisqu'il ne
semble pas possible d'avoir du 64 bits en x86_64 avec a.out) et
celui-ci tourne sans problème sur x86.
gcc ne semble plus savoir compiler des a.out. Cela devrait être le
format de sortie par défaut quand on ne précise pas de -o, mais il me
génère quand même un binaire ELF.
Dans les sources du noyau, il y a plein de code pour gérer le a.out
pour x86_64, cela devrait donc être supporté.
Autre possibilité : comment générer simplement du ELF (j'ai la section
code, je veux la rendre exécutable) ?
--
printk("ufs_read_super: fucking Sun blows me\n");
2.0.38 /usr/src/linux/fs/ufs/ufs_super.c
--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Didier Couderc
Salut,
Vincent Bernat writes:
gcc ne semble plus savoir compiler des a.out. Cela devrait être le format de sortie par défaut quand on ne précise pas de -o, mais il me génère quand même un binaire ELF.
Attention à la confusion, quand on ne précise pas l'option -o l'exécutable produit s'appelle a.out. C'est tout.
Pour produire un exécutable a.out, il faut le demander au linker gcc -Wl,--oformat=a.out-i386-linux ... en remplaçant i386 par ce qui va bien, "objdump -i" pour avoir la liste des formats connus.
-- Mog
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.
Salut,
Vincent Bernat <vince@khabale.org> writes:
gcc ne semble plus savoir compiler des a.out. Cela devrait être le
format de sortie par défaut quand on ne précise pas de -o, mais il me
génère quand même un binaire ELF.
Attention à la confusion, quand on ne précise pas l'option -o
l'exécutable produit s'appelle a.out. C'est tout.
Pour produire un exécutable a.out, il faut le demander au linker
gcc -Wl,--oformat=a.out-i386-linux ...
en remplaçant i386 par ce qui va bien, "objdump -i" pour avoir la
liste des formats connus.
--
Mog
--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
gcc ne semble plus savoir compiler des a.out. Cela devrait être le format de sortie par défaut quand on ne précise pas de -o, mais il me génère quand même un binaire ELF.
Attention à la confusion, quand on ne précise pas l'option -o l'exécutable produit s'appelle a.out. C'est tout.
Pour produire un exécutable a.out, il faut le demander au linker gcc -Wl,--oformat=a.out-i386-linux ... en remplaçant i386 par ce qui va bien, "objdump -i" pour avoir la liste des formats connus.
-- Mog
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.
Vincent Bernat
OoO En ce début d'après-midi nuageux du mardi 18 juillet 2006, vers 14:35, Didier Couderc disait:
gcc ne semble plus savoir compiler des a.out. Cela devrait être le format de sortie par défaut quand on ne précise pas de -o, mais il me génère quand même un binaire ELF.
Attention à la confusion, quand on ne précise pas l'option -o l'exécutable produit s'appelle a.out. C'est tout.
Pour produire un exécutable a.out, il faut le demander au linker gcc -Wl,--oformat=a.out-i386-linux ... en remplaçant i386 par ce qui va bien, "objdump -i" pour avoir la liste des formats connus.
Ca ne doit pas suffir : /usr/lib/gcc/i486-linux-gnu/4.1.2/libgcc_s.so: ne peut lire les symboles: Fichier dans un mauvais format collect2: ld returned 1 exit status
Avec -v, il indique qu'il exécute la commande : /usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib --oformat=a.out-i386-linux /tmp/ccKa2GQh.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crtn.o
Le -m elf_i386 doit posser problème. J'ai effectué les étapes à la main, mais sans -m elf_i386, j'obtiens la même erreur. Si je mets -m blah, il me dit qu'il supporte : elf_i386 i386linux elf_x86_64. Je tente i386linux, je vire --eh-frame-hdr et il se plaint qu'il ne trouve pas -lgcc_s. Et bien sûr, si je vire la liaison dynamique, il se plaint qu'il n'arrive pas à trouver tous les symboles.
Ou alors, peut-être qu'il me faut installer des trucs en plus ? -- IT DOES NOT SUCK TO BE YOU IT DOES NOT SUCK TO BE YOU IT DOES NOT SUCK TO BE YOU -+- Bart Simpson on chalkboard in episode AABF13
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.
OoO En ce début d'après-midi nuageux du mardi 18 juillet 2006, vers
14:35, Didier Couderc <Didier.Couderc@alussinan.org> disait:
gcc ne semble plus savoir compiler des a.out. Cela devrait être le
format de sortie par défaut quand on ne précise pas de -o, mais il me
génère quand même un binaire ELF.
Attention à la confusion, quand on ne précise pas l'option -o
l'exécutable produit s'appelle a.out. C'est tout.
Pour produire un exécutable a.out, il faut le demander au linker
gcc -Wl,--oformat=a.out-i386-linux ...
en remplaçant i386 par ce qui va bien, "objdump -i" pour avoir la
liste des formats connus.
Ca ne doit pas suffir :
/usr/lib/gcc/i486-linux-gnu/4.1.2/libgcc_s.so: ne peut lire les symboles: Fichier dans un mauvais format
collect2: ld returned 1 exit status
Avec -v, il indique qu'il exécute la commande :
/usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib --oformat=a.out-i386-linux /tmp/ccKa2GQh.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crtn.o
Le -m elf_i386 doit posser problème. J'ai effectué les étapes à la
main, mais sans -m elf_i386, j'obtiens la même erreur. Si je mets -m
blah, il me dit qu'il supporte : elf_i386 i386linux elf_x86_64. Je
tente i386linux, je vire --eh-frame-hdr et il se plaint qu'il ne
trouve pas -lgcc_s. Et bien sûr, si je vire la liaison dynamique, il
se plaint qu'il n'arrive pas à trouver tous les symboles.
Ou alors, peut-être qu'il me faut installer des trucs en plus ?
--
IT DOES NOT SUCK TO BE YOU
IT DOES NOT SUCK TO BE YOU
IT DOES NOT SUCK TO BE YOU
-+- Bart Simpson on chalkboard in episode AABF13
--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
OoO En ce début d'après-midi nuageux du mardi 18 juillet 2006, vers 14:35, Didier Couderc disait:
gcc ne semble plus savoir compiler des a.out. Cela devrait être le format de sortie par défaut quand on ne précise pas de -o, mais il me génère quand même un binaire ELF.
Attention à la confusion, quand on ne précise pas l'option -o l'exécutable produit s'appelle a.out. C'est tout.
Pour produire un exécutable a.out, il faut le demander au linker gcc -Wl,--oformat=a.out-i386-linux ... en remplaçant i386 par ce qui va bien, "objdump -i" pour avoir la liste des formats connus.
Ca ne doit pas suffir : /usr/lib/gcc/i486-linux-gnu/4.1.2/libgcc_s.so: ne peut lire les symboles: Fichier dans un mauvais format collect2: ld returned 1 exit status
Avec -v, il indique qu'il exécute la commande : /usr/lib/gcc/i486-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2 -L/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib --oformat=a.out-i386-linux /tmp/ccKa2GQh.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crtn.o
Le -m elf_i386 doit posser problème. J'ai effectué les étapes à la main, mais sans -m elf_i386, j'obtiens la même erreur. Si je mets -m blah, il me dit qu'il supporte : elf_i386 i386linux elf_x86_64. Je tente i386linux, je vire --eh-frame-hdr et il se plaint qu'il ne trouve pas -lgcc_s. Et bien sûr, si je vire la liaison dynamique, il se plaint qu'il n'arrive pas à trouver tous les symboles.
Ou alors, peut-être qu'il me faut installer des trucs en plus ? -- IT DOES NOT SUCK TO BE YOU IT DOES NOT SUCK TO BE YOU IT DOES NOT SUCK TO BE YOU -+- Bart Simpson on chalkboard in episode AABF13
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.