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.