Newsgroup: it.comp.os.linux.development
Titolo: C, C++: come compilare con librerie esterne?

Ciao a tutti.
Sto iniziando ad imparare a programmare sotto Linux in C (che conosco già
benino come sintassi) C++ che conosco poco.
Ho sempre programmato con le librerie standard del C e non ho mai usato le
librerie grafiche.
Ora ho intenzione di inizare ad usare le SDL, che ritengo veramente
interessanti, però mi sto scontrando con alcune difficoltà che non avevo mai
incontrato.
Quello che faccio è inserire in testa al programma un include del tipo:
#include "SLD/SDL.h"
e così dando il comando:
gcc prova.c
il programma viene compilato, ma il linker mi ritorna con degli errori,
ovvero non riesce a trovare i riferimenti delle funzioni SDL che ho usato.
Cioè, da quello che ho capito devo dire al linker dove si trova la libreria.
Allora ho provato ad aggungere lo switch:
-l libSDL.a
ma mi dice che la libreria (che si trova nella path canonica /usr/lib) non
viene trovata.
Come devo fare per compilare il mio file di prova?
Dove posso trovare della doc, che mi spieghi in generale come ci si
comporta?
In caso di progetti grandi penso che convenga fare dei makefile, come si
fanno? Ovvero dove trovo sempre della doc che mi spieghi come si
costruiscono?
Grazie dell'attenzione.
Bye
______________________________________________________
Francesco Apostolico
 
fra...@europe.com
 
fra...@yifan.net

 costruiscono?
Nelle info pages di make.
Ciao
 David
-- 
<d.santinoli presso mi. flashnet. it>

 "-lSDL".
Ho fatto cosě, perň ora sono spuntato un erroro che non capisco, sempre
dovuto alle lib:
[felix@localhost felix]$ gcc prova-sdl.c -lSDL
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_create'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_cancel'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `sem_destroy'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `sem_wait'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `sem_post'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_mutexattr_setkind_np'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `sem_init'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_sigmask'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `sem_trywait'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_mutexattr_init'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `sem_getvalue'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_join'
/usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libSDL.so: undefined
reference
to `pthread_cond_timedwait'
collect2: ld returned 1 exit status
A cosa sono dovuti?
Ciao, grazie.
Francesco

 A cosa sono dovuti?
manca la libreria che gestisce i thread
aggiungi -lpthread
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
Un apostolo vedendo Gesu' camminare sulle acque:
- Cazzo se e' buono 'sto fumo!!!

 Kronos
Ok. Grazie. Ora almeno il prog. di prova riesco a lanciarlo.
Bye


Questo thread mi fa venire in mente un problema correlato.
Capita spesso, linkando dei programmi, propri o, peggio, altrui, di
scontrarsi con questo problema: undefined reference.
Ora, Kronos, tu lo sai a quale libreria si riferiva quel simbolo; a
volte il nome ti aiuta nella ricerca; ma, genericamente, come si fa a
trovare in quale libreria si trova un dato simbolo?
Quando programmavo sotto il VMS, disperato ;-), mi sono fatto dei bei
listing globali di tutte le librerie che avevo li'. Tanti file di testo
su cui facevo la ricerca del simbolo mancante.
Anche qui si deve usare questo escamotage? O c'e' un modo piu' veloce?
Ciao,
	Ermanno Polli

 trovare in quale libreria si trova un dato simbolo?
Per le librerie statiche (lib*.a) si può usare nm (man nm).
-- 
Stefano

 Stefano
Ciao,
	Ermanno

 Io cercavo qualche cosa di piu' efficiente e generale.
Un "btute froce attack" che non necessita di database ausiliari č:
$ grep -rl <simbolo> /usr/lib/lib*.a /usr/local/lib/lib*.a
-- 
Stefano

 wrote:

Ah, gia'.. probabilmente i simboli saranno in formato ASCII. Non mi era
venuto in mente.
Comunque e' un po meglio, ma siamo li'..
Vabbe'.. se non c'e' niente di meglio..
Thanx e ciao,
-- 
      Ermanno Polli   (INFN-LNF)
    user:      hostname:  subdomain:  domain:  country:
ermanno.polli    N/A        lnf         infn     it

 to `pthread_create'
aggiungi -lpthread ( esiste la libreria libpthread ! )

 	Ermanno Polli
I programmi propri e altrui dovrebbero fare uso di autoconf che 
ha degli appositi test per cercare una funzione in una libreria 
e cercarla fra diverse librerie alternative. Nella maggior parte
dei casi la cosa che conviene fare e' cercare nella documentazione
del relativo sistema operativo dove si trovano determinate funzioni,
anche perche' spesso e volentieri gli stessi simboli possono essere
definiti in librerie differenti pensate con scopi differenti.
Per esempio quelle cripto, tradizionalmente hanno diverse alternative
per sistemi US e non-US.
-- 
Francesco P. Lovergine

 ha degli appositi test per cercare una funzione in una libreria 
Beh, finora mi e' capitato di usare solo programmi di altri, sotto Unix
(genericamente parando ;-) ). Ho fatto il programmatore sul VMS, ma da
quando ho iniziato a fare il sysadm, piu' di qualche script non vado.
(della serie "quick and dirty")
Conosco autoconf solo di nome. Provo a scaricarmelo..
[resto-snip]
Thanx e buon panettone. ;-)
Ciao,
