[OSy] Statické linkování knihovny librt.a

Martin Decky decky at dsrg.mff.cuni.cz
Thu Dec 13 10:58:56 CET 2007


Hezky den,

> Mám vytvořenou knihovnu librt.a pomocí archiveru...První problém je, jak 
> zařídit, aby neměla ELF formát, nedaří se mi to v optionech najít.

Staticke knihovny s priponou .a nejsou ve skutecnosti nic jineho, nez
archiv nekolika .o souboru. Tedy ta knihovna samotna nema ELF format (na
zacatku souboru muzete videt neco jako !<arch>).

Format ELF maji pochopitelne ty objektove (.o) soubory, ktere jsou v ni,
ale to neni prekvapive, protoze ELF format objektovych souboru jste
jiste pouzivali i pri buildu kernelu. Teprve pri finalnim linkovani
z nekolika objektovych souboru do vysledne binarky jste vyrobili flat
soubor bez hlavicky.

Podobne tomu bude v tomto pripade. S pomoci knihovny librt.a vytvorite
vysledny obraz uzivatelskeho procesu, ve kterem budou prilinkovany
relevantni casti objektovych souboru z librt.a. Je v podstate na Vas,
zda Vas uzivatelsky proces bude flat soubor nebo si naprogramujete
loader ELF souboru.

> Druhý problém je, jak jí potom přilinkovat. Když použiji následující optiony 
> pro LD:  -T ../Librt/binary.lds -G 0 -static -L../Librt -lrt -g, tak všechno 
> vesele projde, ale v binárce toho vzniklého programu očividně není po 
> librt.a ani stopy.

Prepinac -l se typicky pouziva pro dynamicke knihovny (.so). Pokud
chcete prilinkovat statickou knihovnu (.a), musite ji uvest jako source
soubor spolecne s ostatnimi objektovymi soubory.


M.D.




More information about the NSWI004 mailing list