Pages : 1
#1 Le 26/09/2015, à 11:34
- Cyxo
Problème lors du link
Bonjour,
Je me suis lancé dans la création d'un OS en suivant ce tutoriel : https://youtu.be/rr-9w2gITDM?t=23m7s
Mais au moment de link mes deux fichiers .O, je me retrouve avec cette erreur :
kasm.o: In function 'start':
kernel.asm:(.text+0xe): undefined reference to 'kmain'
J'ai essayez plusieurs trucs, ça n'a pas marché... Note : Je suis sur Windows avec Cygwin
J'ai vu qu'il y avait un post similaire, mais comme le gars répondait pas à vos questions, vous avez pas pu l'aider.
D'avance, voici ce que j'obtiens quand je tapes i686-elf-ld -V
GNU ld (GNU Binutils) 2.24
Supported emulations:
elf_i386
Et i686-elf-gcc -v
Using built-in specs.
COLLECT_GCC=C:\cygwin\usr\cross\bin\i686-elf-gcc.exe
COLLECT_LTO_WRAPPER=c:/cygwin/usr/cross/bin/../libexec/gcc/i686-elf/4.8.2/lto-wr
apper.exe
Target: i686-elf
Configured with: ../gcc-4.8.2/configure --target=i686-elf --prefix=/srcgcc/ghost-i686-elf-tools --disable-nls --enable-languages=c,c++ --without-headers
Thread model: single
gcc version 4.8.2 (GCC)
Dernière modification par Cyxo (Le 26/09/2015, à 11:43)
Hors ligne
#2 Le 26/09/2015, à 12:38
- Braun
Re : Problème lors du link
Bonjour,
Je suis sur Windows avec Cygwin
Sans rancune.
D'où vient la (ta ?) fonction « kmain() » ?
Pour qu'elle soit reconnue il faut qu'elle figure dans un fichier header (.h) et bien sûr dans un fichier objet ou une bibliothèque.
Evidemment les bibliothèques disponibles peuvent différer selon l'O.S.
Hors ligne
#3 Le 26/09/2015, à 14:21
- derderder
Re : Problème lors du link
Tu compile comment ? Avec le build.sh ou a la main ?
Hors ligne
#4 Le 26/09/2015, à 14:33
- Cyxo
Re : Problème lors du link
D'où vient la (ta ?) fonction « kmain() » ?
Pour qu'elle soit reconnue il faut qu'elle figure dans un fichier header (.h) et bien sûr dans un fichier objet ou une bibliothèque.
Evidemment les bibliothèques disponibles peuvent différer selon l'O.S.
Pour la fonction kmain(), en fait je n'ai fais que copier le code du tutoriel pour l'instant, donc elle se trouve dans le fichier kernel.c, compilé en kc.o
J'avais essayé de mettre int kmain() ou juste kmain(), mais aucun ne marche. Après dans le tuto, ils le mettent pas dans un header.
Tu compile comment ? Avec le build.sh ou a la main ?
Etant donné que je suis sur Windows, je fais tout à la main, car les noms des commandes peuvent différer (genre i686-elf-gcc au lieu de juste gcc)
Après, j'ai aussi regardé l'épisode 4 : Windows build et m'en suis inspiré pour compiler à la main. Voici le processus que j'utilise :
Cygwin :
cd c:
cd Users/Paul/Documents/OSs/CmdOS/src
nasm -f elf -o ../bin/kasm.o kernel.asm
i686-elf-gcc -m32 -c kernel.c -o ../bin/kc.o
cd ../bin
i686-elf-ld -m elf_i386 -T link.ld -o kernel.bin kasm.o kc.o
Je dois préciser que mes sources se trouvent dans un dossier src et mes fichiers objets/bin ainsi que le link.ld sont dans un dossier bin.
Dernière modification par Cyxo (Le 26/09/2015, à 14:35)
Hors ligne
#5 Le 26/09/2015, à 14:57
- derderder
Re : Problème lors du link
Tu peux faire objdump -d kc.o et afficher le resultat de la commande ?
Hors ligne
#6 Le 26/09/2015, à 15:03
- Cyxo
Re : Problème lors du link
Whaa merci je viens de découvrir que ce fichier était en PE et pas en ELF !!!! Bon ben je vais le recompiler et je vous donne des nouvelles
EDIT: Bon ben en fait je l'avais déjà compilé en PE et pensait l'avoir écrasé avec le ELF, mais ni i586-elf-gcc ni i686-elf-gcc ne veulent sortir un quelconque fichier. Ils n'affichent rien non-plus dans la console...
EDIT 2: J'ai réussi à générer un elf32-i386 avec TCC et non GCC. Du coup j'ai réussi à avoir mon kernel.bin \o/.
Je vous tiens au courant pour ce qui est de son émulation sur QEMU
Dernière modification par Cyxo (Le 26/09/2015, à 15:51)
Hors ligne
#7 Le 26/09/2015, à 15:54
- Cyxo
Re : Problème lors du link
YOUPIII ça marche, j'ai un magnifique OS qui affiche A par dessus le texte déjà affiché par QEMU, mais au moins ça marche.
Merci beaucoup à derderder et Braun de m'avoir guidé vers la solution.
Dernière modification par Cyxo (Le 26/09/2015, à 15:55)
Hors ligne
Pages : 1