[OSy] Linkovani
Petr Tuma
petr.tuma at dsrg.mff.cuni.cz
Sun Dec 30 21:06:39 CET 2007
Dobry vecer,
> Zkusili jsme to prelozit do elf, ale linker funkci printk nenasel.
> Zkontrolovali jsme i nazvy a parametry,vse sedi. Pro jistotu
> prikladam vystup.
Zkusil bych objdump -t na tu .a knihovnu a main.o, jestli jsou ty
symboly v obou souborech opravdu stejne pojmenovane a na spravnem miste
jako export a import ...
Petr Tuma
>
> STARTUP(../libc/entry.o) ENTRY(__entry)
>
> SECTIONS { .uspace 0x00000000 : { *(.text) *(.data) *(.rodata
> .rodata.*) *(.bss) *(COMMON) }
>
> /DISCARD/ : { *(.reginfo) } }
>
> ================================================== attempt to open
> ../libc/entry.o succeeded ../libc/entry.o attempt to open
> ../libc/libc.a succeeded (../libc/libc.a)_main.o attempt to open
> main.o succeeded main.o main.o: In function `main':
> /afs/ms/u/b/benom4am/lammaos/apps/main.c:12: undefined reference to
> `printk' make: *** [app.lamma] Error 1
>
>
> -----Original Message----- From: osy-bounces at dsrg.mff.cuni.cz
> [mailto:osy-bounces at dsrg.mff.cuni.cz] On Behalf Of Petr Tuma Sent:
> Sunday, December 30, 2007 8:47 PM To: Operating Systems Course
> Subject: Re: [OSy] Linkovani
>
> Dobry vecer,
>
> tusim tu pred nejakou dobou pan Decky zminoval, ze kdyz se jako
> vystupni format pouziva rovnou binary, linker nehlasi unresolved
> symbols. Cituji:
>
> "Jiny zadrhel (na ktery jsme tady uz upozornovali) by hypoteticky
> mohl byt v tom, ze linker pro MIPS, pokud vytvari primo flat soubor
> (tj. OUTPUT(binary)), tak si z nejakeho duvodu vubec nestezuje na
> chybejici symboly. Je potreba nejdrive linkovat do ELF a ten teprve
> pomoci objcopy zkonvertovat na binary."
>
> Zkuste vystup do elf, jestli dostanete nejakou rozumnou hlasku ?
>
> Petr Tuma
>
>
> Miloslav Beno wrote:
>> Dobry vecer,
>>
>> Mame knihovnu libc.a, ve ktere jsou funkce _entry, _main, printk,
>> kazda ve svem object souboru.
>>
>> V uzivatelskem programu pak je funkce main, ze ktere se vola
>> printk. Problem je, ze linker pri sestavovani uzivatelskeho
>> programu do binary formatu najde a prilinkuje funkce
>> (libc.a)_entry, (libc.a) _main, (main.o)main . ale uz neprilinkuje
>> (libc.a)printk. GCC nenahlasi ani, ze funkce printk neni definovana
>> a pri spusteni uzivatelsky program na tomto volani padne.
>>
>> $(LD) --verbose -T ../libc/binary.lds -G 0 -static ../libc/libc.a
>> $(OFILES_EXE) -o $@
>>
>>
>> Binary.lds:
>>
>> STARTUP(../libc/entry.o) OUTPUT_FORMAT(binary) OUTPUT_ARCH(mips)
>>
>> SECTIONS { .uspace 0x00000000 : { *(.text) *(.data) *(.rodata
>> .rodata.*) *(.bss) *(COMMON) } /DISCARD/ : { *(.reginfo) } }
>>
>>
>> Predem dekujeme za reakce.
>>
>>
>> _______________________________________________ OSy mailing list
>> OSy at dsrg.mff.cuni.cz https://dsrg.mff.cuni.cz/mailman/listinfo/osy
>
--
Petr Tuma
Distributed Systems Research Group
Department of Software Engineering
Faculty of Mathematics and Physics
Charles University, Czech Republic
http://dsrg.mff.cuni.cz/~ceres
More information about the NSWI004
mailing list