Večina programja za Linux je napisana v jeziku C in prevedena s prevajalnikom GNU C (GCC). GCC je del vsake distribucije Linuxa. Najnovejša različica prevajalnika, dokumentacija in popravki so dostopni na ftp://ftp.gnu.org/pub/gnu/.
Programi, napisani v C++, se morajo prevesti s prevajalnikom GNU G++, ki je tudi del distribucije Linuxa in dostopen na istem mestu kakor 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 zaradi odvisnosti kode od posebnosti GCC. Jedra različic 2.2, 2.4 in razvojna jedra 2.5 bi se morala pravilno prevesti tudi z novejšimi prevajalniki.
Podatki o prevajalniku EGCS so na naslovu http://www.gnu.org/software/gcc/gcc.html.
Vedite tudi, da v današnjem času razvijalci jedra ne odgovarjajo na obvestila o hroščih starejših jeder, temveč se osredotočajo na razvoj jeder 2.5.x in vzdrževanje jeder 2.2.x in 2.4.x.
[J.H.M. Dassen, Axel Boldt]
V pravilno nameščenem sistemu zahteva nameščanje gnujevskega programskega paketa štiri korake.
.tar.gz
v imeniku /usr/src/
ali kjerkoli že imate svoje izvirne 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 izvirne kode. Izbire, ki jih
prepozna configure
, so navadno zajete v datoteki
INSTALL
ali README
.make
. To bo zgradilo izvedljivi program (ali
programe) iz izvirne 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.Na naslovu http://java.sun.com/java/ je okolje za poganjanje jave podjetja Sun Microsystems.
Lahko dobite tudi izvirno kodo, ki jo je licenciralo podjetje Sun Microsystems.
Domača stran prevajalnika za Javo Jikes podjetja IBM je na http://www10.software.ibm.com/developerworks/opensource/jikes.
Za Linux je na voljo tudi različica brkljalnika HotJava, ki ga izdeluje Sun; glej http://www.java.sun.com/products/hotjava/.
Kaffe, različica jave s prosto izvirno kodo, je na http://www.kaffe.org/.
Na naslovu http://www.blackdown.org/java-linux.html je stran z viri prostih in komercialnih paketov za javo.
Netscape Communicator ima svojo 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/.
Unixovski programi se na splošno 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 jih izvedeli -- lahko ugibate, toda to pogosto privede do hroščatih programov. V tem primeru raje prosite koga drugega, naj vam naredi prenos.
Če imate bsdjevski 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 zajeta v posebni deljeni knjižnici,
/lib/ld.so
, v kateri jo lahko binarne datoteke najdejo. Tako
porablja manj diskovnega prostora in jo lahko preprosteje nadgradimo.
Knjižnico ld.so
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 (glej
razdelek
Kaj je pravzaprav s tem ELF? Z glibc?)
in jo dobite v istem paketu kakor 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 v istem 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č. Na voljo so načini,
da se temu izognemo. Eden od njih 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
.
Zgled: 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/
.
Preverite, ali ste 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
do resničnih knjižničnih datotek. 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 do nove knjižnice, potem prepišite
knjižnice in povezave do 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 prekopirali.
Da, če to ni jedro.
Izbor -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 v 486. Še vedno delujejo v 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 v 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
.
Na voljo je alfa različica 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/.
Navadni GCC za 486 z uporabo izbire -m386
izdela kodo, ki je
boljša za Pentium ali vsaj malo krajša.
gcc -O6
?
Trenutno isto kakor -O2
(GCC 2.5) ali -O3
(GCC 2.6,
2.7). Katerokoli število, večje od tega, naredi trenutno isto.
Datoteke Makefile
novejših jeder uporabljajo izbiro
-O2
in verjetno bi jo morali tudi vi.
linux/*.h
in asm/*.h
?
Datoteki /usr/include/linux
in /usr/include/asm
sta
pogosto simbolni povezavi do imenikov z glavami za izvirno kodo jedra.
Navadno so glave jedra v imeniku /usr/src/kernel*/
.
Če nimate izvirne kode jedra, jo nekje dobite; glej razdelek Kako nadgradim/prevedem 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
Datoteke v zbirniku ležijo v imenikih, odvisnih od arhitekture,
zato morate v računalnikih PC povezati
/usr/src/include/asm
na
/usr/src/linux/include/asm-i386
, v sistemih Sun Sparc na
/usr/src/linux/include/asm-sparc
, na PowerPC na
/usr/src/linux/include/asm-ppc
in tako naprej.
Opazili boste tudi, da morate morda pri novem jedru napisati make
config
. S tem naredite datoteko linux/autoconf.h
.
Glej 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. Podrobnosti si oglejte v priročniku 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 vrste ELF. Glej
ELF-HOWTO
na
ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/.
Najpogostejši vzrok velikih izvedljivih datotek s prevajalnikom za ELF
(glej razdelek
Kaj je pravzaprav s tem ELF? Z glibc?) je, da ni ustreznih povezav
.so
s knjižnicami, ki jih imate. Za vsako knjižnico, kot
npr. libc.so.5.2.18
, ki jo imate, mora biti na voljo ustrezna
povezava.
Pri prevajalniku za a.out je pogost vzrok prevelikih izvedljivih
datotek zastavica povezovalnika (prevajalnika) -g
. Ta
naredi (poleg razhroščevalne informacije v izhodni datoteki) tudi
program,
ki je povezan statično, torej program, ki zajema kopijo
C-jevske knjižnice, namesto reference nanjo.
Drugo, vredno preiskave, sta optimizacijski izbiri -O
in -O2
(glej dokumentacijo prevajalnika GCC) in izbira
-s
(ali ukaz strip
), ki zbriše podatke o simbolih
iz izvedljive datoteke (in s tem onemogoči razhroščevanje).
Morda si boste zaželeli uporabiti izbiro povezovalnika -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 kakor Unixov večopravilni model s procesi heavyweight, ki je
seveda del standardnega jedra Linuxa, je na voljo tudi več izvedb procesov
vrste lightweight ali niti. Novejša jedra udejanjajo model niti,
imenovan kthreads
. Poleg tega so za Linux dostopni še
naslednji paketi:
libc
za Linux obsegajo izvirno kodo
pthreads
. Gnujevski 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 izvirne kode.lwp
, dostopen na
ftp://gummo.doc.ic.ac.uk/rex.Če vas zanimajo podrobnosti, prosim, stopite v stik z avtorji posameznih paketov.
lint
za Linux?
V gnujevski prevajalnik za C (gcc
), ki se uporablja v
sistemih vrste Linux, je vgrajena bolj ali manj enaka funkcionalnost.
Izpis večine uporabnih opozoril dobite z uporabo izbire
-Wall
. Več o tem si preberite v priročniku za GCC (v Emacsu
napišite F1-i
in izberite poglavje o GCC).
Na voljo je prosto dostopen program, imenovan lclint
, ki dela isto kakor standardni lint
. Napovedi in izvirna koda so
dostopni na
ftp://larch.lcs.mit.edu/pub/Larch/lclint, na
svetovnem spletu glej stran
http://lclint.cs.virginia.edu/.
kermit
za Linux?
Kermit se razširja s pravicami razširjanja, ki se razlikujejo od GPL. Izvirna 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.
Glej tudi spis Cable-Modem-HOWTO iz projekta LDP.
Več odjemnikov za ICQ je dostopnih na metalab.unc.edu. (Glej Kako dobim stvari za Linux po FTP-ju?.) Sam ICQ nima odjemnika za Linux, na http://www.mirabilis.com/download/ pa je javanski odjemnik.