Naprej Nazaj Kazalo

5. Prenos, prevajanje in dobivanje programov

5.1 Kako prevedem programe?

Ve�ina programja za Linux je napisana v C-ju in prevedena s prevajalnikom GNU C (GCC). GCC je del vsake distribucije Linuxa. Najnovej�a razli�ica prevajalnika, dokumentacija in popravki so dostopni na mestu ftp://ftp.gnu.org/pub/gnu/.

Programi, napisani v C++, se morajo prevesti s prevajalnikom GNU G++, ki je tudi vklju�en v distribucije Linuxa in dostopen na istem mestu kot GCC.

Za gradnjo jeder razli�ice 2.0.x in poznej�ih boste potrebovali GCC razli�ice 2.7.2.x. Poskus prevajanja jedra Linuxa z drugim prevajalnikom, kot so GCC 2.8.x, EGCS, ali PGCC, lahko povzro�i te�ave, dokler razvijalci jedra ne spremenijo kode tako, da se bo pravilno prevedla tudi s prevajalniki, razli�nimi od GCC 2.7.2.x.

Podatki o prevajalniku EGCS so na naslovu http://egcs.cygnus.com/.

Vedite tudi, da v dana�njem �asu razvijalci jedra ne odgovarjajo na obvestila o hro��ih starej�ih jeder, pa� pa se osredoto�ajo na razvoj jeder 2.3.x in vzdr�evanje jeder 2.2.x.

[J.H.M. Dassen, Axel Boldt]

5.2 Kako namestim GNU-jevsko programje?

Na pravilno name��enem sistemu zahteva name��anje GNU-jevskega programskega paketa �tiri korake.

5.3 Kje lahko dobim Javo?

Paketa Java Developer's Kit (JDK) 1.2 in Java Runtime Environment (JRE) 1.2, ki ju razvijata Sun Microsystems in Blackdown Consulting, sta na http://java.sun.com/. Na naslovu http://www.blackdown.org/java-linux/mirrors.html je seznam stre�nikov za jemanje prek FTP.

Dobite lahko tudi izvorno kodo, katere licenca je v lasti podjetja Sun Microsystems.

Kaffee, razli�ica Jave s prosto izvorno kodo, je na http://www.transvirtual.com/products/.

Doma�a stran prevajalnika za Javo Jikes podjetja IBM je na http://www10.software.ibm.com/developerworks/opensource/jikes.

Za Linux obstaja tudi razli�ica brkljalnika HotJava, ki ga izdeluje Sun, glejte http://www.java.sun.com/products/hotjava/.

Netscape Communicator prihaja z lastno razli�ico okolja za poganjanje Jave, zato imate za pregledovanje spletne javanske grafike morda �e na voljo razli�ico navideznega stroja in ustrezne knji�nice za Javo. Communicator lahko prenesete z http://www.netscape.com/.

5.4 Kako prenesem XXX na Linux?

Unixa�ki programi se v splo�nem zelo lepo prena�ajo med razli�nimi Unixi. Preprosto upo�tevajte namestitvena navodila. �e ne veste odgovorov na nekatera vpra�anja med namestitvenim postopkom - in tudi ne veste, kako bi izvedeli - lahko ugibate, toda to pogosto privede do hro��atih programov. V tem primeru raje prosite koga drugega, da vam naredi prenos.

�e imate BSD-jevski program, lahko poskusite z -I/usr/include/bsd in -lbsd na primernem mestu v prevajalskih vrsticah.

5.5 Kaj je ld.so in kje ga dobim?

Ld.so je dinami�ni nalagalnik knji�nic. V�asih je imela vsaka binarna datoteka, ki je uporabljala deljene knji�nice, na za�etku 3 Kb za�etne kode, ki je poiskala in nalo�ila deljene knji�nice. Dandanes je ta koda vsebovana v posebni deljeni knji�nici, /lib/ld.so, kjer jo lahko binarne datoteke najdejo. Tako porablja manj diskovnega prostora in jo lahko preprosteje nadgradimo.

Knji�nico ld.so lahko dobite z mesta ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ in njegovih zrcalnih mest. V �asu nastanka teh PZV je zadnja razli�ica ld.so.1.9.5.tar.gz.

/lib/ld-linux.so.1 je ista stvar za format ELF (glejte razdelek ,,Kaj je pravzaprav s tem ELF-om?``) in pride v istem paketu, kot nalagalnik za format a.out.

5.6 Kako nadgradim knji�nice, ne da bi sesul svoj sistem?

Pozor: Preden za�nete izvajati ta postopek, morate imeti za vsak slu�aj pripravljeno re�ilno disketo. Lahko gre kaj narobe!

Ta postopek je �e posebej te�ak, �e nadgrajujete zelo stare knji�nice, kot so libc4. V tem primeru morate obdr�ati libc4 na iste sistemu skupaj s knji�nicami libc5, saj jih lahko programi �e vedno potrebujejo. Isto velja za nadgradnjo knji�nic libc5 na �e novej�e knji�nice glibc2.

Problem pri nadgradnji dinami�nih knji�nic je, da v trenutku, ko odstranite stare knji�nice, pripomo�ki, ki jih potrebujete pri nadgradnji na novo razli�ico knji�nic, ne delujejo ve�. Obstajajo na�ini, da se temu izognemo. Eden od na�inov je, da za�asno postavimo dodaten izvod pogonskih knji�nic, ki so v imeniku /lib/, v /usr/lib/, ali /usr/local/lib/, ali drug imenik, naveden v datoteki /etc/ld.so.conf.

Primer: Pri nadgradnji knji�nic libc5 so lahko imena datotek v imeniku /lib/ videti takole:

libc.so.5
libc.so.5.4.33
libm.so.5
libm.so.5.0.9
To so knji�nice za C in matemati�ne knji�nice. Prepi�ite jih v drug imenik, naveden v /etc/ld.so.conf, kot je, denimo, /usr/lib/.
# cp -df /lib/libc.so.5* /usr/lib/
# cp -df /lib/libm.so.5* /usr/lib/
# ldconfig
Prepri�ajte se, da boste pognali ldconfig in s tem osve�ili nastavitev knji�nic.

Datoteki libc.so.5 in libm.so.5 sta simbolni povezavi na resni�ni knji�ni�ni datoteki. Ko nadgrajujete, se nove povezave ne bodo ustvarile, �e imate �e vedno stare, razen, �e uporabite zastavico -f ukaza cp. Zastavica -d ukaza cp bo prepisala simbolno povezavo samo, in ne datoteke, na katero ka�e.

�e morate neposredno prepisati povezavo na knji�nico, uporabite zastavico -f ukaza ln.

Na primer, za prepis novih knji�nic �ez stare, poskusite tole. Najprej naredite simbolno povezavo na nove knji�nice, potem prepi�ite knji�nice in povezave na njih v imenik /lib/, z naslednjimi ukazi:

# ln -sf ./libm.so.5.0.48 libm.so.5
# ln -sf ./libc.so.5.0.48 libc.so.5
# cp -df libm.so.5* /lib
# cp -df libc.so.5* /lib
Spet po prepisu knji�nic ne pozabite pognati programa ldconfig.

�e ste zadovoljni s pravilnim delovanjem novega sistema, lahko odstranite za�asne izvode starih knji�nic z imenika /usr/lib/, ali kamorkoli ste jih �e skopirali.

5.7 Je �e kdo prenesel/prevedel/napisal XXX za Linux?

Najprej poglejte na ,,zemljevid programja za Linux``, Linux Software Map, na mestu ftp://metalab.unc.edu/pub/Linux/docs/linux-software-map in na druge arhive za FTP. Na spletnem naslovu http://www.boutell.com/lsm/ je iskalnik.

Glejte mesta za FTP iz razdelka ,,Kako lahko dobim stvari za Linux po FTP-ju?``. Najprej poi��ite klju�ne besede v datotekah ls-lR ali INDEX.

Poglejte tudi v ,,zemljevid projektov za Linux``, Linux Projects Map, ftp://ftp.ix.de/pub/ix/Linux/docs/Projects-Map.gz.

Na spletnem naslovu http://lfw.linuxhq.com/ je tudi iskalnik stvari za Linux po arhivih FTP.

Poglejte tudi spletno stran Freshmeat, na kateri so vsak dan objavljene novosti za Linux. Najdete jo na http://www.freshmeat.net/; zares je kul, �eprav logotip spominja na ma�jo hrano. (Glejte razdelek ,,Kak�na periodika na zvezi ali zastonj obstaja za Linux?``.) Freshmeat je pravzaprav stran s kazalom, ki se venomer osve�uje s podatki o novih ali osve�enih programih za Linux.

�e ne najdete ni�esar, lahko prenesete izvorno kodo programa in ga sami prevedete. Glejte razdelek ,,Kako prenesem XXX na Linux?``. �e gre za velik programski paket, ki potrebuje nekaj prilagoditev, po�ljite sporo�ilo v comp.os.linux.development.apps.

Ko prevedete ve�ji program, ga, prosim, uvrstite v enega ali ve� FTP arhivov in obvestite javnost s sporo�ilom v comp.os.linux.announce (po�ljite va�e sporo�ilo na < linux-announce@news.ornl.gov>).

Mo�no je, da je �e kdo napisal prosto verzijo uporabnega programa, ki ga potrebujete. Navodila za iskanje izvorne kode najdete v PZV novi�arske skupine comp.sources.wanted.

5.8 Ali lahko uporabljam kodo ali prevajalnik, preveden za 486 na moji 386?

Da, �e to ni jedro.

Izbira -m486 prevajalnika GCC, ki se uporablja za prevajanje izvedljivih datotek za procesorje x486, zgolj spremeni dolo�ene optimizacije. Rezultat so nekoliko ve�je binarne datoteke, ki te�ejo nekoliko hitreje na 486. �e vedno delujejo na 386, �eprav res malo po�asneje.

Jedro Linuxa od razli�ice 1.3.35 naprej uporablja posebne ukaze procesorja 486 ali Pentium, �e je prevedeno posebej za 486 ali Pentium. Tako prevedenega jedra torej ne morete uporabiti na procesorju 386.

GCC lahko nastavite za delo s 386 ali 486; edina razlika je v tem, da nastavitev za 386 privzame izbiro -m386, nastavitev za 486 pa -m486. V obeh primerih lahko to prekli�ete ob posameznem prevajanju ali s spremembo datoteke /usr/lib/gcc-lib/i*-linux/n.n.n/specs.

Obstaja alfa verzija prevajalnika GCC, ki zna napraviti optimizacije za 586, vendar je precej nezanesljiva, posebej pri nastavitvah za velike optimizacije. GCC za Pentium najdete na ftp://tsx-11.mit.edu/pub/linux/ALPHA/pentium-gcc. Priporo�am raje uporabo navadnega GCC za 486; govori se, da uporaba izbire -m386 izdela kodo, ki je bolj�a za Pentium ali je vsaj malo kraj�a.

5.9 Kaj naredi gcc -O6?

Trenutno isto kot -O2 (GCC 2.5) ali -O3 (GCC 2.6, 2.7). Katerokoli �tevilo, ve�je od tega, naredi trenutno isto stvar. Datoteke Makefile novej�ih jeder uporabljajo izbiro -O2, in verjetno bi jo morali uporabljati tudi vi.

5.10 Kje so datoteke linux/*.h in asm/*.h?

Te datoteke so v imenikih /usr/include/linux in /usr/include/asm. Vendar morata biti to pravzaprav simbolni povezavi do izvorne kode jedra v imeniku /usr/src/linux, ne prava imenika. Navadno so glave jedra v imeniku /usr/src/kernel*/.

�e nimate izvorne kode jedra, jo nekje dobite; glejte razdelek ,,Kako nadgradim/prevedem svoje jedro?``.

Potem uporabite ukaz rm, da odstranite vse smeti, in ukaz ln za ustvarjanje povezav:

$ rm -rf /usr/include/linux /usr/include/asm 
$ ln -sf /usr/src/linux/include/linux /usr/include/linux 
$ ln -sf /usr/src/linux/include/asm /usr/include/asm

/usr/src/linux/include/asm je simbolna povezava na imenik asm-<arch>. Ta je odvisen od strojne zasnove ra�unalnika. �e ste pravkar odpakirali va�e drevo izvorne kode jedra, morate uporabiti make symlinks. Opazili boste tudi, da morate morda pri novem jedru napisati make config. S tem naredite datoteko linux/autoconf.h.

5.11 Pri prevajanju jedra dobivam sporo�ila o napakah

Glejte prej�nje vpra�anje glede datotek z glavami.

Spomnite se, da morate pri uporabi popravkov vedno uporabiti izbiro -p0 ali -p1; sicer se lahko popravki uporabijo povsem napa�no. Za podrobnosti glejte priro�nik za program patch (man patch).

Sporo�ilo povezovalnika o neprepoznani izbiri -qmagic

ld: unrecognized option `-qmagic'
pomeni, da morate dobiti novej�i povezovalnik z mesta ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ v datoteki binutils-2.8.1.0.1.bin.tar.gz.

5.12 Kako naredim deljeno knji�nico?

Za format ELF, takole:

$ gcc -fPIC -c *.c 
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o

Za format a.out, vzemite arhiv tools-n.nn.tar.gz z naslova ftp://tsx-11.mit.edu/pub/linux/packages/GCC/src/. V arhivu je dokumentacija, ki vam pove, kaj storite. Upo�tevajte, da so deljene knji�nice za format a.out zelo ko�ljiva zadeva. Razmislite o nadgradnji va�ih knji�nic na deljene knji�nice tipa ELF. Glejte ELF-HOWTO na mestu ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/.

5.13 Moje izvedljive datoteke so (zelo) velike.

Pogost vzrok velikih izvedljivih datotek s prevajalnikom za ELF (glejte razdelek ,,Kaj je pravzaprav s tem ELF-om?``) je neobstoj ustreznih povezav .so na knji�nice, ki jih imate. Za vsako knji�nico kot npr. libc.so.5.2.18, ki jo imate, mora obstajati ustrezna povezava, kot npr. libc.so. Ustvarite jo nekako takole:

# ln -sf libc.so.5.2.18 libc.so

S prevajalnikom za a.out je pogost vzrok prevelikih izvedljivih datotek povezovalnikova (prevajalnikova) zastavica -g. Ta naredi (poleg razhro��evalne informacije v izhodni datoteki) tudi program, ki je povezan stati�no, torej program, ki vsebuje kopijo C-jevske knji�nice, namesto reference na njo.

Ostale stvari, vredne preiskave, sta optimizacijske izbiri -O in -O2 (glejte dokumentacijo prevajalnika GCC) in izbira -s (ali ukaz strip), ki pobri�e podatke o simbolih iz izvedljive datoteke (in s tem onemogo�i razhro��evanje).

Morda si boste za�eleli uporabiti povezovalnikovo izbiro -N pri zelo majhnih izvedljivih datotekah (skupaj z -N manj�ih od 8 Kb), a tega raje ne po�nite, �e ne razumete posledi�ne spremembe v delovanju, in definitivno nikoli pri prevajanju demonov.

5.14 Ali Linux podpira niti ali procese lightweight?

Podobno kot Unixov ve�opravilni model s procesi heavyweight, ki je seveda del standardnega jedra Linuxa, obstaja tudi ve� izvedb procesov tipa lightweight ali niti. Novej�a jedra udejanjajo model niti imenovan kthreads. Poleg tega so za Linux dostopni �e naslednji paketi:

Za podrobnosti, prosim, stopite v stik z avtorji posameznih paketov.

5.15 Kje lahko dobim lint za Linux?

V GNU-jevski prevajalnik za C (gcc), ki se uporablja na sistemih tipa Linux, je vgrajena bolj ali manj enaka funkcionalnost. Izpis ve�ine uporabnih opozoril dobite z uporabo izbire -Wall. Za ve� informacij berite priro�nik za GCC (v Emacsu napi�ite control-h in potem i in izberite poglavje o GCC).

Obstaja prosto dostopen program imenovan lclint, ki dela isto stvar, kot standardni lint. Najave in izvorna koda so dostopni na ftp://larch.lcs.mit.edu/pub/Larch/lclint, na svetovnem spletu glejte stran http://larch-www.lcs.mit.edu:8001/larch/lclint.html.

5.16 Kje lahko najdem kermit za Linux?

Kermit se raz�irja s pravicami raz�irjanja, ki se razlikujejo od GPL. Izvorna koda in nekatere izvedljive datoteke so dostopne na ftp://kermit.columbia.edu/.

Spletna stran projekta Kermit na Columbia University je na naslovu http://www.columbia.edu/kermit/.

5.17 V Linuxu �elim uporabljati kabelski modem

Spletna stran CablemodemInfo in xDSL na http://www.cablemodeminfo.com/ ima razdelek, posve�en Linuxu.


Naprej Nazaj Kazalo