[LD]Linking error: File format not recognized bij .O files

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 281284

Topicstarter
Hallo!

Ik ben bezig met een OS maken. Ik heb al een bootloader, en nu wil ik mijn kernel linken. De kernel bestaat uit een ASM bestand (k_entry.asm) en een aantal C files. Het compilen lukt maar het linken niet. Dit staat in mijn build.bat file (bij lijn 4 gaat het fout):
code:
1
2
3
4
5
@echo off
gcc -c kernel.c -o kernel.o
nasm -f aout k_entry.asm -o k_entry.o
ld kernel.ld kernel.o k_entry.o
pause

Mijn linkerscript is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
  .text  0xFF800000 : {
    *(.text)
  }
  .data  : {
    *(.data)
  }
  .bss  :
  {                     
    *(.bss)
  }
}

De output van het batch bestand is:
code:
1
2
k_entry.o: file not recognized: File format not recognized
Druk op een toets om door te gaan. . .
  • Ik gebruik GCC voor windows (geen DJGPP).
  • De kernel moet kernel.bin worden, maar het linken mislukt.
Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:02

Creepy

Tactical Espionage Splatterer

Met een google actie op gcc en nasm vond ik vrij snel http://www.archivum.info/gnu.gcc.help/2008-04/msg00048.html. Kan je daar wat mee?
Zo ja, google je dan de volgende keer zelf? Zo nee, waarom heb je dat dan nog niet gemeld dat je dat al wel hebt geprobeerd?

Wil je voor een eventueel volgend topic PRG Beleid en Het algemeen beleid #topicplaatsen eens doorlezen? Daar staat in uitgelegd hoe het hier in z'n werk gaat :) GoT is geen helpdesk maar een forum.

[ Voor 13% gewijzigd door Creepy op 21-11-2008 23:20 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07-06 15:50
De foutmelding is vrij duidelijk: nasm produceert een object file in een formaat dat ld (uit de GNU binutils neem ik aan) niet begrijpt. Je geeft zelf een optie aan nasm mee om a.out formaat objects te produceren; de logische vraag is dan: ondersteund ld die wel? Wat voor object files produceert GCC zelf onder Windows? COFF neem ik aan?

In dat geval, kun je niet gewoon nasm ook COFF files laten genereren? Of moet het juist a.out zijn om handmatig je secties te kunnen positioneren?

Als je het uitvoerformaat van nasm niet kunt veranderen, is het logische alternatief binutils (re)compilen voor een target die wél a.out ondersteunt (en dan het uitvoerformaat van gcc daar ook bij aanpassen).

[ Voor 19% gewijzigd door Soultaker op 22-11-2008 15:07 ]