GRUB-0.93 kompilieren - Riesen Stage Files bzw. Linker Fehler?

S

sticky bit

Grünschnabel
Also ich versuch mich gerade im GRUB kompilieren, Version 0.93.
Umgebungs CFLAGS waren "-O3 -march=i586 -mcpu=i586", Umgebungs LDFLAGS "-Bdynamic". Konfigureiert habe ich das ganze mit ./configure --prefix=/usr --sysconfdir=-etc --disable-hercules --disable-serial --disable-auto-linux-mem-opt. Dann make und sobald make an die Stage2 Dateien geht passiert am Ende folgendes:
Code:
gcc  -O3 -march=i586 -mcpu=i586  -Bdynamic -o pre_stage2.exec -nostdlib -Wl,-N \
-Wl,-Ttext -Wl,8200 pre_stage2_exec-asm.o pre_stage2_exec-bios.o \
pre_stage2_exec-boot.o pre_stage2_exec-builtins.o pre_stage2_exec-char_io.o \
pre_stage2_exec-cmdline.o pre_stage2_exec-common.o pre_stage2_exec-console.o \
pre_stage2_exec-disk_io.o pre_stage2_exec-fsys_ext2fs.o \
pre_stage2_exec-fsys_fat.o pre_stage2_exec-fsys_ffs.o pre_stage2_exec-fsys_jfs.o \
pre_stage2_exec-fsys_minix.o pre_stage2_exec-fsys_reiserfs.o \
pre_stage2_exec-fsys_vstafs.o pre_stage2_exec-fsys_xfs.o \
pre_stage2_exec-gunzip.o pre_stage2_exec-hercules.o pre_stage2_exec-md5.o \
pre_stage2_exec-serial.o pre_stage2_exec-smp-imps.o pre_stage2_exec-stage2.o \
pre_stage2_exec-terminfo.o pre_stage2_exec-tparm.o
pre_stage2_exec-terminfo.o: In function `ti_set_term':
pre_stage2_exec-terminfo.o(.text+0x220): undefined reference to `memcpy'
pre_stage2_exec-terminfo.o: In function `ti_get_term':
pre_stage2_exec-terminfo.o(.text+0x23d): undefined reference to `memcpy'
collect2: ld returned 1 exit status
(gekürzt zwecks besserer Lesbarkeit, gesamte Ausgabe des make Vorgangs im Anhang)
OK, dacht ich mit liegt vielleicht an meinen CFLAGS bzw. LDFLAGS so Stagefiles sind sicherlich was besonderes also ein make distclean; unset LDFLAGS; unset CFLAGS und der ganze Spass von vorne. Ergebnis, das selbe, selber Fehler. Hmm, also hab ich mir die Befehle mal angesehen und, na klar memcpy() kommt aus libc.a aber es ist der -nostdlib Switch gesetzt, dann linked das wohl ins Leere. Schön als wieder die make distclean und die CFLAGS angepasst, dies mal "-lc" und siehe da alles lief durch. Nur jetzt hab ich riesen Stage Files, so um die 13 MB each, bzw. Stage2 sogar fast 27 MB:
Code:
$ ls -l /usr/share/grub/i386-pc/
total 263120
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:09 e2fs_stage1_5
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:09 fat_stage1_5
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:09 ffs_stage1_5
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:09 jfs_stage1_5
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:10 minix_stage1_5
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:10 reiserfs_stage1_5
-rw-r--r--    1 root     wheel    134481151 Jun 21 09:10 stage1
-rw-r--r--    1 root     wheel    268959875 Jun 21 09:09 stage2
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:10 vstafs_stage1_5
-rw-r--r--    1 root     wheel    134504703 Jun 21 09:10 xfs_stage1_5
Naja, das kanns ja nicht sein, die bring ich ja nie in meinem /boot unter und das kann auch nicht stimmen, so riesen Dinger für nen Bootloader, das ist alles teansy weansy bei so nem Ding und nicht gleich im MB Bereich, auch bei GRUB sicher nicht. Naja, einen hat ich noch, wieder die CFLAGS angepasst und diesmal "-lc -Wl,-no-whole-archive", hat aber auch nichts genützt, immer noch geanuso riesig die Dinger...

Den GRUB Hint von LFS hab ich mir schon angesehen, konnte mir aber auch nicht weiterhelfen. Also vielleicht weiss ja jmd. hier mehr, wie man das hinkriegen könnte? Sonst hab ich ein System ohne Bootloader, toll... :(
 

Anhänge

  • make.txt
    17,5 KB · Aufrufe: 1
Zuletzt bearbeitet:
MTS

MTS

Kaiser
öhm.
also als vorübergehende Lösung würde ich dir empfehlen erstmal lilo zu nehmen .... da sollte es eigentlich keine Probleme geben.

Wenn du unbedingt Grub haben willst sag nochmal bescheid. Vielleicht finde ich dann bei zieten was raus...
Aber wenn ich jetzt ganz ganz ganz in blaue tippen würde, könnte man ja annehmen dass du da irgendne große library statisch linkst, wäre zumindest ne Erklärung. Aber das muss ich mir dann erst genauer anschauen...
 
S

sticky bit

Grünschnabel
Nö, lilo wollt ich nicht, der wollte unbedingt nasm zum Kompilieren und das wollte ich wieder nicht...
Hat sich aber inzwischen erledigt, ich habe wohl irgendwas verduselt oder irgendwas ist schief gelaufen, beim ersten Versuch ohne die CFLAGS. Als ich es auf eindringlichen Rat von jmd. noch mal probiert habe ging es dann. Die Aufrufe von memcpy() scheinen von Kompiler wegen des -O3 Switches hinzugekommen zu sein (mit -O2 und -O sowie den -march und -mcpu Flags bei mir anscheinend auch...), ohne die Flags, muss man nicht gegen die libc.a linken one einen Fehler zu bekommen und hat auch keine Riesen-Dateien mehr... :)
 

Ähnliche Themen

Finde Fehler im Code nicht

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

HP PSC 2175 - CUPS druckt nicht

Opensuse 11 WLAN sichtbar, jedoch keine Verbindung

Modulfehler?

Oben