ADE: binutils 2.7Jan Skýpala
Důležitým balíkem programů v ADE distribuci je archiv nazvaný binutils. V něm je
obsaženo několik programů potřebných nebo velmi vhodných pro vývoj softwaru. ld
Asi nejdůležitějším programem v archivu binutils je ld. Jedná se o linker,
schopný zpracovat soubory *.o vygenerované véčkem či jinými překladači a
vygenerovat spustitelný soubor. Jedná se vlastně o obdobu freewarového Blinku
nebo Slinku ze SAS/C. Tento program (a tím i archiv binutils) je velice
potřebný, protože GNU C tehdy, když má vygenerovat již spustitelný program, volá
právě tento linker, a ten se v archivu s GNU Céčkem nenachází.
Linker tedy umí spojit požadované objekty (soubory s příponou .o), nalézt v
archivech (linkovaných knihovnách) další potřebné, přealokovat data a propojit
tabulky symbolů. Jestliže na konci nechybí k řádnému symbolu jeho výskyt v
generovaném kódu, program je úspěšně slinkován a je zapsán na disk. Linker ld
podporuje Linker Command Language - speciální druh jazyka, kterým lze řídit běh
linkeru.
Pokud chcete volat ld přímo, pak za ld uveďte seznam object souborů, dále -o
jméno, kde jméno bude názvem výsledného souboru (pokud tento parametr neuvedete,
bude jako jméno použito a.out) a pro každý archiv (linkovanou knihovnu) se
jménem libxxx.a uveďte -lxxx (na Unixu i v ADE distribuci je nutné, aby jména
linkovaných knihoven začínala lib a končila příponou .a). Pokud máte archivy
jinde než na standardních cestách (ADE:lib), parametrem -Lcesta řeknete linkeru,
kde má navíc hledat. Ostatní parametry pro linkování použiji pouze zkušení
programátoři.
Linker Command Language umožňuje přesnou specifikaci linkování - lze jím určovat
vstupující objecty, formáty souborů (objecty mohou v různých formátech – možná
jste si všimli, že objecty z GNU C nepoužijete v SAS C a naopak na odstranění
druhého nedostatku se již ale pracuje), to, jak bude výsledný program
vygenerován, kam budou umístěny společné bloky apod. Jedná se o velice mocný
nástroj, běžný programátor ho však nikdy nebude potřebovat použit. nm
Prográmek nm umí vypsat symboly v object souborech nebo spustitelných
programech (pokud tam ještě jsou). Pro každý symbol nm vypíše jeho hodnotu, typ
(může se jednat o absolutní konstantu, která nebude změněna při linkování,
neinicializovaná data - BSS sekce, inicializovaná data, nedefinovaný symbol,
symbol pro debugger apod.) a jméno symbolu. nm umí vypsat i symboly objectů v
archivech (linkovaných knihovnách). c++filt
Pokud jste si vypsali pomocí nm nějaký object, který vznikl překladem
zdrojáku v C++, určitě jste si všimli podivných jmen symbolů něco takového přece
ve zdrojáku vůbec nemáte. Tyto symboly vznikly úpravou identifikátorů použitých
v C++. Je to nutné, neboť v tomto jazyce si např. můžete zadefinovat funkci
bla(int x) a funkci bla(char x) a při volání překladač podle použitého argumentu
zavolá tu požadovanou - budete tedy mít dvě funkce o stejném jménu, ale jiných
parametrech. Obyčejné véčko by pro obě tyto funkce vytvořilo symbol se jménem
bla, to však pochopitelně nejde - dva stejně pojmenované symboly nejsou
přípustné. A tak C++ do jména symbolu zahrne i počet a typy argumentů apod.
Prográmek c++filt požaduje jako argument jméno symbolu v objectu, které (pokud
se jedná o symbol z C++) převede na jeho podobu v jazyce C++ a vypíše. ar
ar je standardní archiver- umožňuje vytvoření, modifikaci a extrakci souborů
z archivu. Archiv je jeden soubor, který obsahuje kolekci jiných souborů
uložených tak, že je tyto soubory z archivu možné obnovit.
Nejdůležitější použiti aru (zároveň -i důvod, proč je zařazen mezi binutils) -je
spojení několika object souborů do jednoho archivu, z něhož může linker ld tyto
objecty extrahovat - tyto archivy jsou vlastně linkovanými knihovnami.
Standardní příponou pro archiv vytvořený arem je .a, archivy-linkované knihovny
pak používají navíc jako první tři písmena jména archivu lib. ranlib
Když vytvoříte nějakou linkovanou knihovnu (archiv s objecty), která bude
docela velká (např. libstdc++.a má 300kB), může v ní probíhat hledání toho
potřebného objectu pro přilinkování docela dlouho. Proto je možné do takového
archivu přidat index všech symbolů, při linkování se pak prohlédne tento index a
velice rychle bude rozhodnuto, které objecty jsou zapotřebí. GNU ar umí vytvářet
tento index sám, pokud je uveden parametr s, standardním příkazem na vytvoření
tohoto indexu je pak prográmek ranlib. Po vytvoření linkované knihovny pouze
spusťte tento příkaz s parametrem jménem knihovny. strip
Příkaz strip umožňuje ze souboru (objectu nebo programu) vypustit symboly
(debugovací, lokální, všechny...). To umožňuje zmenšit soubor o nepotřebné
informace. Vypuštění symbolů může také zajistit linker, pokud při linkování
uvedete argument -s. Pozor! S objectem, z něhož jste vypustili normální symboly,
většinou už nic neuděláte - linker nemá podle čeho object propojit s ostatními
objecty. objcopy
Prográmek objcopy umožňuje zkopírování objectu, přičemž během kopírování
mohou být s objectem provedeny některé akce. Může se např. jednat o vypuštění
symbolů, konverzi do jiného formátu objectu, přidat nebo vypustit sekci z
objectu apod. objdump
Prográmek objdump vypíše informace o objectu, přičemž nejzajímavějším
využitím je pochopitelně disassemblace objectu a zjišťování, jak dobře vlastně
to GNU C překládá. Přeložte si něco s parametrem g3 a pak na výsledný object
spusťte objdump s parametry -disassemble -source a koukejte. size a strings
Prográmek size vypíše velikostí jednotlivých sekcí v objectu, strings vypíše
řetězce v objectu (hledá posloupnosti vytisknutelných znaků, které jsou alespoň
čtyři znaky dlouhé). Závěr
Binutils je důležitý balík pro programátora. Linker ld je nezbytně nutný pro
programování v GNU Céčku, ar a ranlib bude potřebovat každý, kdo pracuje na
trochu větším projektu a snaží se udržovat jistou strukturu a pořádek a ostatní
programy jsou takovými bonbónky navíc nezbytně potřebné nejsou, ale mohou se
hodit. Archiv lze najít již tradičně na,
fpt.grolier.rf/pub/amiga/current/amiga-bin/
ADE: binutils 2.7 |
Hodnocení: 9,0 z 10 |
Autor: FSF |
Cena: - |
Typ: freeware |
+ |
nezbytně nutné při
programování v GNU C, umí toho opravdu hodně |
- |
možná umí až příliš mnoho,
mohly být kratší |
Vytlačiť článok
Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.
Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing
none
|