AMIGA REVIEW obsah časopisu online!
  Domov     Software     Hry     Obaly     Download  

ADE: binutils 2.7

Jan 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

AMIGA REVIEW

57 ( 11-12 / 2000 )
56 ( 9-10 / 2000 )
55 ( 7-8 / 2000 )
54 ( 5-6 / 2000 )
53 ( 3-4 / 2000 )
52 ( 1-2 / 2000 )
 
51 ( 12 / 1999 )
50 ( 11 / 1999 )
49 ( 10 / 1999 )
48 ( 9 / 1999 )
46-47 ( 7-8 / 1999 )
45 ( 6 / 1999 )
44 ( 5 / 1999 )
43 ( 4 / 1999 )
42 ( 3 / 1999 )
41 ( 2 / 1999 )
40 ( 1 / 1999 )
 
39 ( 12 / 1998 )
38 ( 11 / 1998 )
37 ( 10 / 1998 )
36 ( 9 / 1998 )
35 ( x / 1998 )
34 ( x / 1998 )
33 ( 1-2 / 1998 )
 
32 ( 11-12 / 1997 )
31 ( 9-10 / 1997 )
30 ( 7-8 / 1997 )
29 ( 6 / 1997 )
28 ( 5 / 1997 )
27 ( 4 / 1997 )
26 ( 3 / 1997 )
25 ( 2 / 1997 )
24 ( 1 / 1997 )
 
23 ( 12 / 1996 )
22 ( 11 / 1996 )
21 ( 10 / 1996 )
20 ( 9 / 1996 )
18-19 ( 7-8 / 1996 )
17 ( 6 / 1996 )
16 ( 5 / 1996 )
15 ( 4 / 1996 )
14 ( 3 / 1996 )
13 ( 2 / 1996 )
12 ( 1 / 1996 )
 
11 ( 12 / 1995 )
10 ( 11 / 1995 )
9 ( 10 / 1995 )
8 ( 9 / 1995 )
7 ( 7 / 1995 )
6 ( 5 / 1995 )

ATLANTIDA NEWS

5 ( 3 / 1995 )
4 ( 1 / 1995 )
 
3 ( 11 / 1994 )
2 ( 9 / 1994 )
1 ( 7 / 1994 )
0 ( 5 / 1994 )