Newsgroup: it.comp.os.linux.software
Titolo: Come compilare un programma staticamente

Ciao a tutti,
nonostante siano anni che uso linux ed anche che compilo, quando mi
servono, applicazioni, in realta' sono piuttosto digiuno di
programmazione.
Il mio problema e' questo: ho necessita' di compilare staticamente un
programma. Nello specifico, si tratta di xzgv
(
http://sourceforge.net/projects/xzgv
)
Non riesco a capire pero' come fare.
Leggendo i vari Makefile del sorgente, mi pare di aver capito che 
le opzioni per la compilazione sono tutte riassunte in un file che si
chiama 
config.mk
Li' dentro, tra le varie cose ci sono le righe
CC=gcc
CFLAGS=-O2 -Wall
Da quel che mi era sembrato di capire, per compilare staticamente il
compilatore deve avere l'opzione "-static" oppure "-static-libgcc": ho
provato ad aggiungere queste opzioni in CFLAGS, ma senza fortuna: il
risultato e' sempre linkato alle librerie.
Qui finiscono i miei tentativi: qualcuno mi puo' suggerire come riuscire?
Grazie mille
Fabio

 Qui finiscono i miei tentativi: qualcuno mi puo' suggerire come riuscire?
primo devi avere le librerie che servono a xzgv , statiche in modo da
poterle includere in fase di linkaggio
http://tldp.org/HOWTO/Program-Library-HOWTO/index.html
 (cfr: static lib)
per sapere quali sono le librerie che ti servono, puoi prima compilare il
programma normalmente , dopo fare ldd sull'eseguibile
ciao

 programma normalmente , dopo fare ldd sull'eseguibile
Ti ringrazio per l'aiuto: ho fatto qualche passo avanti.
Pero' ho subito una stranezza: ldd xzgv mi da' tutta una serie di
librerie, ma la prima della lista e'
        linux-gate.so.1 =>  (0xffffe000)
A che punta? Le altre puntano ad oggetti effettivi, tipo
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7ba9000)
ma la prima mi sembra strana.
Ad ogni modo, con l'aiuto del link che mi hai dato ho creato una libreria
statica con tutte le librerie che servivano e l'ho chiamata libxzgv.a
L'ho messa nella dir dei sorgenti ed ho aggiunto nel Makefile, in coda
alla riga relativa alla compilazione
-l libxzgv.a
Al momento della compilazione, pero', ottengo l'errore
gcc `pkg-config --libs gtk+-2.0` `pkg-config --libs gdk-pixbuf-2.0` -o
xzgv main.o filedetails.o gotodir.o updatetn.o confirm.o help.o copymove.o
rename.o resizepic.o dither.o rcfile.o misc.o getopt.o getopt1.o backend.o
-l libxzgv.a
/usr/bin/ld: cannot find -llibxzgv.a
collect2: ld returned 1 exit status
make: *** [xzgv] Error 1
include ../
config.mk
CFLAGS+=`pkg-config --cflags gtk+-2.0` `pkg-config --cflags gdk-pixbuf-2.0`
LDFLAGS+=`pkg-config --libs gtk+-2.0` `pkg-config --libs gdk-pixbuf-2.0`
all: xzgv
OBJS=   main.o \
        filedetails.o gotodir.o updatetn.o confirm.o help.o \
        copymove.o rename.o \
        resizepic.o dither.o \
        rcfile.o misc.o \
        getopt.o getopt1.o \
        backend.o
xzgv: $(OBJS)
        $(CC) $(LDFLAGS) -o xzgv $(OBJS) -l libxzgv.a
                                        --------------
e la parte sottolineata e' quella che ho aggiunto io.
Immagino di dovergli dire di usare _solo_ le librerie statiche che ho
creato io, vero? Ma come?
Grazie ancora
Fabio

 -l libxzgv.a
no, le librerie si includono senza il prefisso "lib" ed il ".a", quindi:
-lxzgv
inoltre, creati una directory dove mettere tutte le librerie speciali
(cioč quelle create da te per roba del genere) ed includila nel Makefile
con  " -L<PATHAQUELLADIRECTORY>"
In tuttoquello che ho scritto stai attento al case sensitive.
Ti consiglio di leggerti un howto sulle opzioni del gcc , e piu' in
generale su come si costriusce un Makefile

 generale su come si costriusce un Makefile
Si', mi sa che mi devo fare un po' di cultura... anche se in questo
momento sono un po' incasinato, lo mettero' nella scaletta delle cose da
fare: hai un link su info su come si costruisce un Makefile da suggerirmi? 
Grazie
Fabio

 suggerirmi?
C'è un programma che crea eseguibile "statici" paertendo da
eseguibili "dinamici".
Ovviamente, non mi ricordo il nome :)
Prova a cercarlo su freshmeat o sourceforge..
Ciao.
-- 
*** Linux user # 198661 ---_ ICQ 33500725 ***
    ***  Home  
http://www.kailed.net
  ***
        ***  Powered by openSUSE  ***

 Prova a cercarlo su freshmeat o sourceforge..
trovato: statifier
Grazie mille!
Ciao
Fabio

Fabio wrote:

Io non l'ho mai provato, facci sapere se e come funziona..
