Newsgroup: it.comp.os.linux.development
Titolo: gcc linker

salve  :)  E' il mio primo post in questo newsgroup. Scusatemi l'ignoranza
quindi, mi sono avvicinato a linux recentemente. 
allora ripartizionando il mio hard disk ho creato una partizione FAT32
(che linux monta su hda6) di scambio tra win e linux dato che la scrittura
su NTFS č beta nella mia versione del kernel. Distribuzione knoppix 5
Dunque io ho una libreria e un esempio che la usa. la mia libreria č
formata da piů file sorgenti. Dobbiamo compilarla e poi linkare la
libreria con l'esempio (dopo aver compilato quest'ultimo).
Spiego tutti i passaggi che ho fatto cosě forse viene piů facile aiutarmi.
Scusatemi se sono un pň lungo.
----------------COMPILAZIONE
LIBRERIA-------------------------------------------------------
Partiamo creando i file oggetti per ogni file sorgente (disattivando
quindi il linking):
root@1[IrrNewt_src]# g++ -I "../../../irrlicht 1.2/include" -I
"../../../newtonLinux/newtonSDK/sdk" *.cpp -c
per ogni .cpp viene compilato un file oggetto. Comprimiamo tutti i file
oggetto in un unico file libreria:
ar -r irrnewt.a *.o
ora abbiamo il file di libreria irrnewt.a con tutti i file oggetto dentro.
-------------------COMPILAZIONE
ESEMPIO-------------------------------------------
lanciamo il compilatore su "hello world.cpp" disattivando il linking (per
vedere qual'č il problema dato che non funziona, poi lo riattiviamo).
Viene creato il relativo file oggetto "hello world.o". Ora dobbiamo
linkare il "hello world.o" con la libreria (irrnewt.a) per fare
l'eseguibile. Se infatti lanciamo il linker solo su "hello world.o" il
risultato č un undefine reference per ogni funzione della libreria. quindi
ld "hello world.o" -l"irrnewt.a" -o"hello world.bin"
e qua c'č il problema. dopo aver eseguito il comando "ar" ho copiato
irrnewt.a nella stessa posizione del file sorgente. inoltre il linker
viene lanciato nello stesso percorso del file sorgente e oggetto (si
trovano nella stessa cartella) infatti non specifico nessun percorso. Il
risultato del linking?
/usr/bin/ld  -lirrnewt.a not found
perchč, dato che irrnewt.a si trova nel path corrente? ho provato anche a
specificare il percorso della libreria con l'opzione -L (scrivendo -L
"/media/hda6/irrnewt/examples/hello world") ma niente da fare. Ho provato
pure -L"./" per tentare di specificare il percorso corrente ma niente. Ho
provato anche altre opzioni ma niente.
-------------------------------------------------------------------------------------
P.S. anche quando compilo la libreria attivando il linking (quindi
dovrebbe darmi solo un errore di undefine reference per il main) mi da un
undefine reference per le funzioni di newton (una libreria che uso). linko
libNewton.a (che si trova nello stesso path) e non lo trova (come sopra)
Qualcuno puň aiutarmi, per favore?
Scusate ancora se sono stato lungo  :D 
 :ciao:
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 /usr/bin/ld  -lirrnewt.a not found
non vorrei sbagliarmi, ma in questo modo ld cerca libirrnewt.a.a,
es: se vuoi linkare la librerie libm.a usi: -lm
prova a fare il link in questo modo:
ln "hello world.o" irrnewt.a -o "hello world.bin"
prendi con le pinze quello che ti dico perchè è una vita che non programmo.
Riccardo

 ar rcs libirrnewt.a *.o
(nota che ho messo il prefisso lib alla libreria)
che rispetto alla directory del tuo hello_world sta in, ad esempio, ../lib/
(il nome dei file senza spazi, grazie :))
poi linka hello_world con queste opzioni:
-L../lib -lirrnewt

 ln "hello world.o" irrnewt.a -o "hello world.bin"
Grazie a entrambi per le risposte! ho provato a modificare il nome in
libirrnewt.a e a metter -lirrnewt ma non funziona, mi dice che la libreria
non la può trovare. Poi ho provato a togliere -l e a scrivere il nome
completo della libreria (g++ libirrnewt.a hello_world.cpp) e la libreria
la trova, però il compilatore mi da un undefine reference per ogni
funzione della libreria. so che la libreria la trova perchè uso anche
funzioni di un altra libreria, anch'essa con il suo file .a, che linko
sempre scrivendone il nome senza -l e non ci sono undefine reference per
quella libreria
Forse ho sbagliato a compilare libirrnewt.a? quali opzioni devo passare a
g++ per compilare una libreria statica?
Grazie ciao


 g++ per compilare una libreria statica?
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 nomi che nei precedenti file non sono risolti.
grazie, ho risolto cosě. inoltre per il -lirrnewt che non funzionava ho
risolto pure mettendo -L"./" prima
grazie ancora dell'aiuto 
ciao :-)
