Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.os.linux.development > #27

Re: Linea di comando per gcc

From guido84 <guido84@invalid.invalid>
Newsgroups it.comp.os.linux.development
Subject Re: Linea di comando per gcc
Date 2017-06-03 06:56 +0000
Organization Aioe.org NNTP Server
Message-ID <ogtmic$11ij$1@gioia.aioe.org> (permalink)
References <ogsm4v$1orl$1@gioia.aioe.org> <ogt3q1$2co$1@virtdiesel.mng.cu.mi.it>

Show all headers | View raw


Il 3/6/2017 03:36:01 enoquick scrisse:
>Il 02/06/2017 16:42, guido84 ha scritto:

>> Su it.comp.lang.c mi e' stato detto che e' meglio non mettere
>> il "-lm" in questa linea di comando:

>> $: gcc -Wall -O3 log_e.c -lm -o log_e

>> Il sorgente log_e.c fatto apposta e' questo:
>> --------------
>> #include <stdio.h>
>> #include <math.h>
>> 
>> int main()
>> {
>> double enne;
>> scanf("%lf", &enne);
>> printf("\nlog(%lf) = %lf\n\n", enne, log(enne));
>> 
>> return 0;
>> }
>> -----------------
>> 
>> Ebbene, io sono un principiante, chi me l'ha detto ha esperienza
>> ma non di Linux (usa Windows NT) e m'ha suggerito di cambiare:
>> double enne;  ->  double enne = 0.0;
>> 
>> ma Ld continua a non trovare le librerie:
>> ----------
>> /tmp/ccwk0tkr.o: nella funzione "main":
>> prova.c:(.text.startup+0x2d): riferimento non definito a "log"
>> collect2: error: ld returned 1 exit status
>> -----
>> 
>> Potreste darmi una dritta su questa questione grazie in anticipo?
>> 

>enne e' usato solo per l'input, quindi non serve inizializzarlo.
>Per il linker occorre dare -lm per includere la libreria matematica che
>contiene log

Grazie della rispota, hai confermato quel che pensavo.

>Non vedo dove sta il problema.

Ho usato la linea di comando con "-lm", un certo "jak" mi ha detto
su it.comp.lang.c di NON usarla perche' potrebbe causare errori.
Copio e incollo:
-------------
Quasi tutti i compilatori, quando vedono utilizzare dati in
virgola mobile, includono una libreria matematica. Nella fattispecie, il
gcc ne utilizza una versione composta da built-in function che magari
non è la migliore ma sicuramente produce file eseguibili dalle
dimensioni più contenute. Potresti anche volerne utilizzare una ottenuta
da terze parti e non quella standard e siccome il parametro -lm utilizza
la 'fast link table' e cioè cerca nei percorsi che hai dichiarato una
libreria che inizia per 'lib' e finisce per quel che hai messo dopo la
'l' (in questo caso libm.a) ti troveresti, in questo caso errori del
linker per entry duplicate. Quindi no, l'opzione -lm non _deve_ esser
messa, eventualmente _può_.
Approfitterei anche per far notare che la portabilità dipende da come
scrivi il codice sorgente e, sicuramente, non dalle librerie con cui
linki il codice oggetto compilato. Anzi.
------------

>Piuttosto se si vuole fare le cose per bene occorre porsi la domanda
>'che succede se un utente immette un qualcosa che non sia convertibile
>in double?'

Si' ma quel codice l'avevo scritto (per jak) solo per vedere se
riuscivo a compilare senza usare "-lm". Comunque quelli della
libreria math.h sono bravissimi, perche' m'aspettavo un segfault,
invece ecco cosa mi dice:
$ echo vediamo | ./log_e

log(-0.000000) = nan

e questo con qualunque altra parola o lettera in input.
Grazie di nuovo e ciao

P.S. Ne approfitto: se volessi evitare di dover dare l'input con
"echo ... | ", ma darlo come si fa con $1 a bash, come dovrei
cambiare il sorgente?
Non e' mica facile trovarlo il modo, perche' ho provato con
sscanf() ma mi fa casini inenarrabili :-(


-- 
Saluti,
Guido

Back to it.comp.os.linux.development | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Linea di comando per gcc guido84 <guido84@invalid.invalid> - 2017-06-02 21:42 +0000
  Re: Linea di comando per gcc enoquick <enoquick@gmail.com> - 2017-06-02 20:36 -0500
    Re: Linea di comando per gcc guido84 <guido84@invalid.invalid> - 2017-06-03 06:56 +0000
      Re: Linea di comando per gcc Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-03 08:39 +0100
        Re: Linea di comando per gcc guido84 <guido84@invalid.invalid> - 2017-06-03 08:38 +0000
          Re: Linea di comando per gcc Giuseppe Della Bianca <bepi.zac@zac.adria.it> - 2017-06-03 14:51 +0200
            Re: Linea di comando per gcc guido84 <guido84@invalid.invalid> - 2017-06-03 13:40 +0000
              Re: Linea di comando per gcc Giuseppe Della Bianca <bepi.zac@zac.adria.it> - 2017-06-04 12:04 +0200
          Re: Linea di comando per gcc Alessandro Pellizzari <shuriken@amiran.it> - 2017-06-03 14:38 +0100
            Re: Linea di comando per gcc guido84 <guido84@invalid.invalid> - 2017-06-03 14:13 +0000
      Re: Linea di comando per gcc enoquick <enoquick@gmail.com> - 2017-06-03 21:07 -0500
        Re: Linea di comando per gcc guido84 <guido84@invalid.invalid> - 2017-06-04 08:15 +0000

csiph-web