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]
Na pravilno name��enem sistemu zahteva name��anje GNU-jevskega programskega paketa �tiri korake.
.tar.gz
v imeniku /usr/src/
,
ali kjerkoli �e imate va�e izvorne datoteke, raz�irite in
dearhivirajte paket z ukazom:
# tar zxvf package-name.tar.gz
./configure
s katerimikoli argumenti, ki jih
potrebujete, v najvi�jem imeniku arhiva izvorne kode. Izbire, ki jih
prepozna configure
so navadno vsebovane v datoteki
INSTALL
ali README
.make
. To bo zgradilo izvedljivi program (ali
programe) iz izvorne kode in lahko traja nekaj minut ali nekaj ur,
odvisno od hitrosti ra�unalnika in velikosti paketa.make install
. To bo namestilo prevedene binarne
datoteke, nastavitvene datoteke in vse knji�nice v ustrezne imenike.
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/.
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.
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.
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:
To so knji�nice za C in matemati�ne knji�nice. Prepi�ite jih v drug imenik, naveden vlibc.so.5 libc.so.5.4.33 libm.so.5 libm.so.5.0.9
/etc/ld.so.conf
, kot je, denimo,
/usr/lib/
.
Prepri�ajte se, da boste pognali# cp -df /lib/libc.so.5* /usr/lib/ # cp -df /lib/libm.so.5* /usr/lib/ # ldconfig
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:
Spet po prepisu knji�nic ne pozabite pognati programa# 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
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.
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.
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.
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.
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
.
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
pomeni, da morate dobiti novej�i povezovalnik z mesta ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ v datotekild: unrecognized option `-qmagic'
binutils-2.8.1.0.1.bin.tar.gz
.
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/.
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.
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:
libc
za Linux vsebujejo izvorno kodo
pthreads
. GNU-jevski prevajalnik za programski jezik Ada na
ftp://metalab.unc.edu/pub/Linux/devel/lang/ada/gnat-3.01-linux+elf.tar.gz
vsebuje binarne datoteke, narejene iz te izvorne kode.lwp
, dostopen na
ftp://gummo.doc.ic.ac.uk/rex.Za podrobnosti, prosim, stopite v stik z avtorji posameznih paketov.
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.
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/.
Spletna stran CablemodemInfo in xDSL na http://www.cablemodeminfo.com/ ima razdelek, posve�en Linuxu.