PDA

View Full Version : GCC e librerie


rasega
12-05-2005, 16:19
Ciao,
sto programmando da poco sotto Linux ed essendo abituato con Win non so come siano organizzate le librerie da includere nei programmi.
Uso Emacs come editor e poi compilo con gcc,
ora però ho provato ad includere alcune librerie (conio.h, term.h) ma mi sa che non me le trova !!
Non sono standard sotto Linux ??
Che devo fare per avere le funzioni matematiche contenute in conio.h (che so, round(),trunc(),...)

Grazie

ilsensine
12-05-2005, 16:21
Non esiste conio.h sotto linux, devi utilizzare le funzioni di termios.h in sostituzione.

Che devo fare per avere le funzioni matematiche contenute in conio.h (che so, round(),trunc(),...)
math.h
Ricordati di linkare con le librerie matematiche (flag -lm)

rasega
12-05-2005, 16:23
Uhm, ma quindi non esistono neanche le funzioni round() e simili ??
Mi spieghi cosa devo fare esattamente, oppure mi passi un tutorial/manualetto così lo imparo una volta x tutte please ??

Grasssie !!

ilsensine
12-05-2005, 16:29
Uhm, ma quindi non esistono neanche le funzioni round() e simili ??
Sono funzioni matematiche, quindi stanno in math.h.
Se le trovavi in conio.h, forse quest'header includeva a sua volta header di librerie matematiche.

Mi spieghi cosa devo fare esattamente, oppure mi passi un tutorial/manualetto così lo imparo una volta x tutte please ??

Non ho ben capito cosa vuoi fare...per round & co ti ho detto dove trovarle, poi...?

rasega
12-05-2005, 16:33
Ricordati di linkare con le librerie matematiche (flag -lm)
E' il dover linkare che non mi torna, io in genere faccio
gcc prova.c -o prova
e fine... :(

ilsensine
12-05-2005, 16:52
gcc prova.c -o prova -lm

rasega
12-05-2005, 16:55
Thanx !!
C'è un manualetto on-line per conoscere tutti 'sti comandi di gcc please ??

ilsensine
12-05-2005, 17:19
Probabilmente. Comuqnue già con man gcc ottieni parecchie informazioni.

rasega
12-05-2005, 17:20
E' vero, grazie !! :cool:

ilsensine
12-05-2005, 17:21
Il manuale ufficiale lo trovi qui:
http://www.gnu.org/software/gcc/onlinedocs/

Gica78R
13-05-2005, 10:18
gcc prova.c -o prova -lm
Quel -lm comporta che le librerie matematiche vengano linkate staticamente? Come mai quando si include math.h, a differenza delle altre librerie (stdio, stdlib, fcntl, ecc.), e' necessario quel flag?

ilsensine
13-05-2005, 10:24
-l<suffisso> indica di linkare una libreria con un dato suffisso, ovvero con il nome lib<suffisso>.so. Con -lm verrà linkata la libreria libm.so (nb i .so sono equivalenti alle dll di windows).
Viene normalmente linkata la libreria dinamica, non quella statica (a meno che non specifichi -static, oppure a meno che esista solo la versione statica).
Le funzioni matematiche sono da sempre separate dalla libc, non so per quale motivo (o meglio, ho una mia idea).

rasega
31-05-2005, 11:16
Come fare a scoprire dove una determinata funzione è contenuta, ovvero in che libreria, sotto Linux ??
Ed inoltre, come apro il reference di una certa funzione (ad esempio se voglio sapere la sintassi esatta...) ??
In particolare sto cercando di capire se esiste la funzione gettime() o qualcosa di simile... (ovviamente DEVE esistere !! ;) )

RaouL_BennetH
31-05-2005, 11:19
Come fare a scoprire dove una determinata funzione è contenuta, ovvero in che libreria, sotto Linux ??
Ed inoltre, come apro il reference di una certa funzione (ad esempio se voglio sapere la sintassi esatta...) ??
In particolare sto cercando di capire se esiste la funzione gettime() o qualcosa di simile... (ovviamente DEVE esistere !! ;) )

dovresti installare le manpages-dev (ma probabilmente le hai già installate) e per una qualsiasi funzione digiti:

man nome_funzione

oppure

info nome_funzione

rasega
31-05-2005, 11:21
Uhm...e se quella funzione non esiste (perchè ha un nome leggermente diverso !!), non posso mettermi a spulciare il man da terminale :muro:
Non ho capito il discorso delle manpages-dev :confused: ... ma forse t'ho risposto già nella frase precedente a questo !!

RaouL_BennetH
31-05-2005, 11:35
Uhm...e se quella funzione non esiste (perchè ha un nome leggermente diverso !!), non posso mettermi a spulciare il man da terminale :muro:
Non ho capito il discorso delle manpages-dev :confused: ... ma forse t'ho risposto già nella frase precedente a questo !!

ti dico quello che normalmente faccio io:

la prima cosa, se devo utilizzare una funzione, mi guardo il man, ad esempio:

man raoul

bene, se la funzione non esiste perchè o il man non me la riporta, o perchè fa parte di librerie non standard, mi limito a cercarla su google e vedo a quale libreria appartiene.

rasega
31-05-2005, 11:38
OK grazie, moh ce provo,
hai news riguardo a gettime() o qualcosa di simile x caso please ?? :cool: ;)

anx721
31-05-2005, 11:49
Devi scariarti qualke reference delle funzioni.

Qui:

http://www.cplusplus.com/ref/

puoi trovare la reference della libreria standard, quella che dovrebbe essere fornita uguale su tutti i sistemi.


Qui:

http://www.opengroup.org/onlinepubs/007908799/

hai un reference per gli header disponibili su unix/linux; puoi cliccare su system headers per vedere l'elenco degli headers o su system interface per avere l'elenco delle funzioni. Puoi scaricarti tutta la guida con un programma per scaricare siti come HTTrack

rasega
31-05-2005, 13:33
Grazie, molto utili questi siti...anche se non sempre ho disponibile una connessione internet mentre programmo e quindi cercherò di aver qualcosa offline !!

Thanx !!