Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 1143

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Building and Installing Software Packages for Linux: Risoluzione dei problemi</TITLE>
 <LINK HREF="Software-Building-HOWTO-8.html" REL=next>
 <LINK HREF="Software-Building-HOWTO-6.html" REL=previous>
 <LINK HREF="Software-Building-HOWTO.html#toc7" REL=contents>
</HEAD>
<BODY>
<A HREF="Software-Building-HOWTO-8.html">Avanti</A>
<A HREF="Software-Building-HOWTO-6.html">Indietro</A>
<A HREF="Software-Building-HOWTO.html#toc7">Indice</A>
<HR>
<H2><A NAME="s7">7. Risoluzione dei problemi</A></H2>

<P>
<P>Se <EM>xmkmf</EM> e/o <EM>make</EM> hanno funzionato senza problemi,
potete passare alla 
<A HREF="Software-Building-HOWTO-8.html#finalsteps">prossima sezione</A>.
Tuttavia, nella "vita reale", poche cose vanno bene al primo tentativo.
&Egrave; in questi casi che la vostra intraprendenza viene messa alla prova.
<P>
<H2><A NAME="ss7.1">7.1 Errori in fase di link</A>
</H2>

<P>
<UL>
<LI>Supponiamo che <EM>make</EM> fallisca con un: <CODE>Link error: -lX11:
No such file or directory</CODE> (Nessun file o directory con quel nome), 
anche dopo che xmkmf &egrave; stato invocato. Ci&ograve; potrebbe significare
che il file <EM>Imake</EM> non &egrave; stato preparato correttamente.
Controllate che nella prima parte del <EM>Makefile</EM> ci siano delle righe
tipo:

<BLOCKQUOTE><CODE>
<PRE>
LIB=            -L/usr/X11/lib
INCLUDE=        -I/usr/X11/include/X11
LIBS=           -lX11 -lc -lm
</PRE>
</CODE></BLOCKQUOTE>


Le opzioni <CODE>-L</CODE> e <CODE>-I</CODE> dicono al compilatore e al linker
dove cercare i file <EM>library</EM> e <EM>include</EM>, rispettivamente.
In questo esempio, le <EM>librerie di X11</EM> dovrebbero essere nella
directory <CODE>/usr/X11/lib</CODE>, e i <EM>file include di X11</EM> dovrebbero
essere nella directory <CODE>/usr/X11/include/X11</CODE>. Se sulla vostra
macchina non &egrave; cos&igrave;, apportate i cambiamenti necessari al
<EM>Makefile</EM> e riprovate il <EM>make</EM>.
</LI>
</UL>
<P>
<UL>
<LI>Riferimenti non definiti alle funzioni della libreria matematica, 
come il seguente:
<BLOCKQUOTE><CODE>
<PRE>
         /tmp/cca011551.o(.text+0x11): undefined reference to `cos'
</PRE>
</CODE></BLOCKQUOTE>


La soluzione &egrave; di linkargli esplicitamente la <CODE>libreria
matematica</CODE>, aggiungendo un <B>-lm</B> al flag <EM>LIB</EM> o
<EM>LIBS</EM> nel <CODE>Makefile</CODE> (vedere esempio precedente).
</LI>
</UL>
<P>
<P>
<P>
<UL>
<LI>Ancora un'altra cosa da provare se <EM>xmkmf</EM> fallisce &egrave; 
lo script seguente:
<BLOCKQUOTE><CODE>
<PRE>
         make -DUseInstalled -I/usr/X386/lib/X11/config
</PRE>
</CODE></BLOCKQUOTE>

Che &egrave; una specie di <EM>xmkmf</EM> ridotto all'osso.
</LI>
</UL>
<P>
<UL>
<LI>In rarissimi casi, l'esecuzione di <EM>ldconfig</EM> come <EM>root</EM>
potrebbe essere la soluzione:
<BLOCKQUOTE><CODE>
<PRE>
</PRE>
</CODE></BLOCKQUOTE>


<B># ldconfig</B> aggiorna i link simbolici alla libreria condivisa.
<EM>Questo potrebbe non essere necessario.</EM>
</LI>
</UL>
<P>
<UL>
<LI>Alcuni <CODE>Makefile</CODE> usano degli alias non riconosciuti per
le librerie presenti nel vostro sistema. Per esempio, il binario 
potrebbe richiedere <CODE>libX11.so.6</CODE>, ma in <CODE>/usr/X11R6/lib</CODE> 
non c'&egrave; nessun file o link con quel nome. Per&ograve;, c'&egrave; 
un <CODE>libX11.so.6.1</CODE>. La soluzione &egrave; di fare un <B>ln -s
/usr/X11R6/lib/libX11.so.6.1 /usr/X11R6/lib/libX11.so.6</B>, come root.
Ci&ograve; potrebbe dover essere seguito da un <B>ldconfig</B>.
</LI>
</UL>
<P>
<P>
<UL>
<LI>A volte il sorgente necessita delle vecchie librerie nella 
versione X11R5 per essere compilato. Se avete le librerie R5 in 
/usr/X11R6/lib (avete avuto la possibilit&agrave; di installarle durante la
prima installazione di Linux), allora dovete solo assicurarvi di avere 
i link di cui il software ha bisogno per la compilazione. Le 
<CODE>librerie R5</CODE> sono chiamate <CODE>libX11.so.3.1.0</CODE>, 
<CODE>libXaw.so.3.1.0</CODE>, e <CODE>libXt.so.3.1.0</CODE>. Di solito vi servono 
dei link, come <EM>libX11.so.3 -> libX11.so.3.1.0</EM>. Forse il 
software avr&agrave; bisogno anche di un link del tipo <EM>libX11.so ->
libX11.so.3.1.0</EM>. Naturalmente, per creare un link "mancante", usate 
il comando <B>ln -s libX11.so.3.1.0 libX11.so</B>, <EM>come root</EM>.
</LI>
</UL>
<P>
<P>
<P>
<P>
<UL>
<LI>Alcuni pacchetti esigeranno l'installazione di versioni aggiornate di una o
pi&ugrave; librerie. Per esempio, le versioni 4.x della suite 
<EM>StarOffice</EM> della StarDivision GmbH erano famose per richiedere 
<CODE>libc</CODE> in versione 5.4.4 o successiva. Anche il pi&ugrave; recente
<EM>StarOffice</EM> 5.0 non girer&agrave; nemmeno dopo l'installazione con 
le nuove librerie <CODE>glibc 2.1</CODE>. Fortunatamente, il pi&ugrave; nuovo
<EM>StarOffice</EM> 5.1 risolve tali problemi. Se avete una versione di
<EM>StarOffice</EM> pi&ugrave; vecchia, potreste dover copiare, da root, una 
o pi&ugrave; librerie nelle directory appropriate, rimuovere le vecchie 
librerie, poi ripristinare i link simbolici (controllate l'ultima versione 
dello <CODE>StarOffice miniHOWTO</CODE> 
<A HREF="Software-Building-HOWTO-16.html#traduzioni">(tradotto)</A> 
per maggiori informazioni su questo argomento).

<B>Attenzione: Usate molta cautela nel fare ci&ograve;, poich&eacute; potreste
rendere non funzionante il vostro sistema se combinate dei pasticci.</B>

Potete trovare le librerie pi&ugrave; aggiornate presso 
<A HREF="ftp://metalab.unc.edu/pub/Linux/libs">Sunsite</A>.
</LI>
</UL>
<P>
<H2><A NAME="ss7.2">7.2 Altri problemi</A>
</H2>

<P>
<P>
<UL>
<LI>Uno script <EM>Perl</EM> o shell installato vi d&agrave; un <CODE>No such
file or directory</CODE> come messaggio d'errore. In questo caso, controllate
i permessi del file per assicurarvi che il file sia eseguibile e
controllate l'intestazione del file per accertarvi che la shell o il programma 
invocato dallo script sia nel posto specificato.
Per esempio, lo script potrebbe iniziare con:
<BLOCKQUOTE><CODE>
<PRE>
#!/usr/local/bin/perl
</PRE>
</CODE></BLOCKQUOTE>

Se infatti <EM>Perl</EM> &egrave; installato nella vostra directory
<CODE>/usr/bin</CODE> invece che nella <CODE>/usr/local/bin</CODE>, allora lo
script non funzioner&agrave;. Ci sono due modi per correggere
questo problema. L'intestazione del file script pu&ograve; essere cambiata in
<CODE>#!/usr/bin/perl</CODE>, o si pu&ograve; aggiungere un link simbolico alla
giusta directory, <B>ln -s /usr/bin/perl /usr/local/bin/perl</B>.
</LI>
</UL>
<P>
<UL>
<LI>Alcuni programmi X11 richiedono le librerie Motif per la compilazione.
Le distribuzioni Linux standard non hanno le librerie Motif installate,
e al momento Motif costa 100-200$ extra (sebbene in parecchi casi
funzioni anche la versione freeware 
<A HREF="http://www.lesstif.org/">Lesstif</A>). Se vi serve Motif per la compilazione di un certo 
pacchetto, ma vi mancano le librerie Motif, pu&ograve; essere possibile
ottenere dei <EM>binari linkati staticamente</EM>. Il linkaggio statico
incorpora le routine di libreria nei binari stessi. Ci&ograve; si traduce in
file binari pi&ugrave; grandi, ma il codice girer&agrave; sui sistemi in cui
mancano le librerie.

<BLOCKQUOTE><CODE>
<PRE>
</PRE>
</CODE></BLOCKQUOTE>


Quando un pacchetto richiede, per la compilazione, delle librerie non 
presenti sul vostro sistema, ci&ograve; provocher&agrave; errori in fase di link
(errori tipo <CODE>undefined reference</CODE> - riferimento non definito).
Le librerie potrebbero essere del tipo costoso (propriet&agrave; di qualcuno)
o difficili da trovare per qualche altra ragione. In tal caso, 
ottenere un binario <EM>linkato staticamente</EM> dall'autore del pacchetto, 
o da un gruppo utenti Linux, pu&ograve; essere il modo pi&ugrave; facile per
effettuare delle riparazioni.
</LI>
</UL>
<P>
<P>
<UL>
<LI>Eseguendo uno script <EM>configure</EM> &egrave; stato creato uno strano
Makefile, uno che sembra non avere nulla a che fare col pacchetto che state
tentando di compilare. Ci&ograve; significa che &egrave; stato eseguito il
<EM>configure</EM> sbagliato, uno trovato da qualche altra parte nel path.
Lanciate sempre <EM>configure</EM> come <B>./configure</B> per evitare
questo problema.</LI>
</UL>
<P>
<P>
<UL>
<LI>La maggior parte delle distribuzioni sono passate alle librerie
<CODE>libc 6 / glibc 2</CODE> dalla pi&ugrave; vecchia <CODE>libc 5</CODE>. I binari
precompilati che funzionavano con la vecchia libreria potrebbero andare
in bomba se avete aggiornato la libreria. La soluzione &egrave; o di
ricompilare le applicazioni dal sorgente o di ottenere dei nuovi binari
precompilati. Se state aggiornando il vostro sistema a <CODE>libc 6</CODE> e
riscontrate dei problemi, fate riferimento al <EM>Glibc 2 HOWTO</EM>
<A HREF="Software-Building-HOWTO-16.html#traduzioni">(tradotto)</A> di Eric Green.

<BLOCKQUOTE><CODE>
<PRE>
</PRE>
</CODE></BLOCKQUOTE>


Notate che ci sono delle piccole incompatibilit&agrave; fra le versioni minori
di <CODE>glibc</CODE>, cos&igrave; un binario compilato con <CODE>glibc 2.1</CODE>
potrebbe non funzionare con <CODE>glibc 2.0</CODE> e vice versa.

</LI>
</UL>
<P>
<UL>
<LI>A volte &egrave; necessario togliere l'opzione <EM>-ansi</EM> dai flag di
compilazione nel <CODE>Makefile</CODE>. Ci&ograve; abilita le caratteristiche
supplementari di gcc, quelle non-ANSI in particolare, e permette la 
compilazione di pacchetti che richiedono tali estensioni. (Grazie a 
Sebastien Blondeel per questa indicazione).</LI>
</UL>
<P>
<UL>
<LI>Alcuni programmi esigono di essere <EM>setuid root</EM>, per poter
essere eseguiti con <EM>privilegi di root</EM>. Il comando per effettuare
ci&ograve; &egrave; <B>chmod u+s nomefile</B>, <EM>come root</EM> (osservate
che il programma deve gi&agrave; essere di propriet&agrave; di root). Questo ha
l'effetto di impostare il bit <EM>setuid</EM> nei permessi del file. Questo
problema viene fuori quando il programma accede all'hardware di sistema, come
un modem o un lettore CD ROM, o quando le librerie SVGA vengono chiamate
dal modo console, come in un particolare noto pacchetto di emulazione.
Se un programma funziona quando eseguito da root, ma d&agrave; messaggi di
errore tipo <EM>access denied</EM> (accesso negato) ad un utente normale, 
sospettate che la causa sia questa.

<P>
<P><B>Avvertimento:</B>
Un programma con <EM>setuid</EM> impostato come root pu&ograve; porre un 
rischio di sicurezza per il sistema. Il programma gira con privilegi di root 
ed ha cos&igrave; il potenziale di causare danni significativi. Accertatevi 
di sapere cosa fa il programma, guardando il sorgente se possibile, prima
di impostare il bit <EM>setuid</EM>.
<P>
</LI>
</UL>
<P>
<P>
<H2><A NAME="ss7.3">7.3 Ritocchi e messa a punto</A>
</H2>

<P>
<P>Potreste voler esaminare il <CODE>Makefile</CODE> per accertarvi che vengano
usate le migliori opzioni di compilazione possibili per il vostro sistema.
Per esempio, impostando il flag <EM>-O2</EM> si sceglie il pi&ugrave; alto
livello di ottimizzazione ed il flag <EM>-fomit-frame-pointer</EM> provoca
la generazione di un binario pi&ugrave; piccolo (sebbene il debugging
sar&agrave; cos&igrave; disabilitato). <B>Per&ograve; non giocherellate con
tali opzioni, a meno che non sappiate cosa state facendo, e comunque non
prima di aver ottenuto un binario funzionante.</B>
<P>
<P>
<H2><A NAME="ss7.4">7.4 Dove trovare maggiore aiuto</A>
</H2>

<P>
<P>Nella mia esperienza, forse il 25% delle applicazioni supera la
fase di compilazione cos&igrave; com'&egrave;, senza problemi. Un altro 50%,
o gi&ugrave; di l&igrave;, pu&ograve; essere "persuaso" a farlo con uno sforzo
variabile da lieve ad erculeo. Questo significa che ancora un numero
significativo di pacchetti non ce la faranno, non importa cosa si faccia.
In tal caso, i binari Intel <CODE>ELF</CODE> e/o <CODE>a.out</CODE> di questi
potrebbero essere trovati presso 
<A HREF="ftp://metalab.unc.edu">Sunsite</A> o presso 
<A HREF="ftp://tsx-11.mit.edu">TSX-11 archive</A>. 
<A HREF="http://redhat.com">Red Hat</A> e
<A HREF="http://www.debian.org">Debian</A> hanno vasti archivi di binari
preimpacchettati della maggior parte dei pi&ugrave; popolari software per Linux.
Forse l'autore del software pu&ograve; fornire i binari compilati per il
vostro particolare tipo di macchina.
<P>
<P><CODE>Notate che se ottenete i binari precompilati, dovrete controllarne la
compatibilit&agrave; con il vostro sistema:</CODE>
<UL>
<LI><CODE>I binari devono girare sul vostro hardware (i.e., Intel x86).</CODE></LI>
<LI><CODE>I binari devono essere compatibili con il vostro kernel (i.e., a.out o ELF).</CODE></LI>
<LI><CODE>Le vostre librerie devono essere aggiornate.</CODE></LI>
<LI><CODE>Il vostro sistema deve avere le appropriate utilit&agrave; di
installazione (rpm o deb)</CODE>.</LI>
</UL>
<P>Se tutto il resto non funziona, potete trovare aiuto nei newsgroup
appropriati, come 
<A HREF="news://comp.os.linux.x">comp.os.linux.x</A> o 
<A HREF="news://comp.os.linux.development">comp.os.linux.development</A>.
<P>Se non funziona proprio niente, almeno avrete fatto del vostro meglio, ed
avrete imparato molto.
<P>
<P>
<P>
<P>
<P>
<HR>
<A HREF="Software-Building-HOWTO-8.html">Avanti</A>
<A HREF="Software-Building-HOWTO-6.html">Indietro</A>
<A HREF="Software-Building-HOWTO.html#toc7">Indice</A>
</BODY>
</HTML>