Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/09/2015, à 12: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, à 12:43)

Hors ligne

#2 Le 26/09/2015, à 13:38

Braun

Re : Problème lors du link

Bonjour,

Cyxo a écrit :

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, à 15: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, à 15:33

Cyxo

Re : Problème lors du link

Braun a écrit :

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.

derderder a écrit :

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, à 15:35)

Hors ligne

#5 Le 26/09/2015, à 15: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, à 16: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, à 16:51)

Hors ligne

#7 Le 26/09/2015, à 16: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, à 16:55)

Hors ligne