Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [C] Undefinite reference to...

    Il problema è alquanto strano, in quanto non mi è mai capitato prima.

    Ho scritto un piccolo progetto che si occupa di analizzare un file di testo e di salvare in un array tutta una serie di informazioni.
    Questo progetto è stato scritto sotto Windows usando l'ide Dev-C++.

    Sotto la piattaforma Microsoft non ricevo alcun tipo di errore, ed il programma si esegue e svolge i suoi compiti correttamente.
    Utilizzando Linux (il sistema sul quale verrà testato il mio programma per la valutazione) però ricevo un singolare errore:

    codice:
    modulo1.c:(.text+0x2ac): undefined reference to `pow'
    dove pow è una funzione della libreria math.c.
    Incredibile a dirsi ma anche se la librerie math è stata inclusa il compilatore non la riesce a trovare...
    Da considerare anche il fatto che il file di libreria è effettivamente presente.

    Il codice che crea tutto questo macello è il seguente:

    codice:
    num += charToInt(str[fr]) * (int) pow(10,pot++);
    Di seguito (penso derivi dall'errore che ho postato qualche riga sopra) c'è quest'altro errore:

    codice:
    collect2: ld returned 1 exit status
    In poche parole io mi scorro un array di char dalla fine fino ad un certo punto per procurarmi dei numeri interi.
    Ad esempio se (partendo da dx verso sx) incontro '1' '0' '5' allora il valore intero salvato in num sarà 105.

    charToInt come si sarà intuito è una funzione che dato un carattere di tipo numerico mi restituisce il valore intero relativo al char passato come parametro (cioè se passo il carattere '5' mi verrà restituito l'intero 5).

    pow non c'è bisogno che vi dica cosa faccia.

    Da coda derivano quei due errori??


    Grazie

  2. #2
    Incredibile a dirsi ma anche se la librerie math è stata inclusa il compilatore non la riesce a trovare...
    Quale switch hai usato per includerla? GNU GCC sotto Linux richiede un linking esplicito della libreria math con l'opzione -lm.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  3. #3
    file pow.c
    Codice PHP:
    #include <stdio.h>
    #include <math.h>


    int main (int argc, const char argv[]) {

        
    printf("2^2=%d",(int) pow(2,2));

        return (
    0);

    gcc pow.c

    naturalmente me la compila correttamente,
    a te?
    ciao
    sergio

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Originariamente inviato da mondobimbi
    file pow.c
    Codice PHP:
    #include <stdio.h>
    #include <math.h>


    int main (int argc, const char argv[]) {

        
    printf("2^2=%d",(int) pow(2,2));

        return (
    0);

    gcc pow.c

    naturalmente me la compila correttamente,
    a te?
    ciao
    sergio
    Si si, anche io ho fatto una prova di questo tipo e funziona tutto bene.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Originariamente inviato da pallinopinco
    Quale switch hai usato per includerla? GNU GCC sotto Linux richiede un linking esplicito della libreria math con l'opzione -lm.
    Ah, interessante!
    Ma siccome uso un makefile per compilare tutto questa opzione devo metterla all'intero di quel file giusto?

  6. #6
    Sì, aggiungila tra le opzioni di compilazione relativa al linking...
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Andrebbe scritto cosi?

    codice:
    modulo1.o: solver.o vettori.o clausole.o  modulo1.c letterali.h \
    				vettori.h clausole.h solver.h modulo1.h
    	cc -c -lm modulo1.c
    Se si continua a non andare.

  8. #8
    Posta il makefile; comunque dovresti aggiungerlo alla variabile LDFLAGS.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Ecco il makefile:

    codice:
    objects = main.o modulo1.o solver.o clausole.o vettori.o
    modulo1: $(objects) 
    	cc -o modulo1 $(objects)
    main.o: solver.o modulo1.o clausole.o vettori.o main.c \
    				letterali.h vettori.h clausole.h solver.h
    	cc -c main.c 
    modulo1.o: solver.o vettori.o clausole.o  modulo1.c letterali.h \
    				vettori.h clausole.h solver.h modulo1.h
    	cc -c modulo1.c 
    solver.o: vettori.o clausole.o solver.c 
    	cc -c solver.c
    clausole.o: vettori.o clausole.c vettori.h letterali.h clausole.h
    	cc -c clausole.c 
    vettori.o: vettori.c vettori.h
    	cc -c vettori.c
    
    .PHONY: clean
    clean:
    	rm $(objects) modulo1
    Purtroppo non essendo mio questo codice e non avendoci mai giocato prima d'ora con i makefile sono in difficoltà.

  10. #10
    Prova così:
    codice:
    objects = main.o modulo1.o solver.o clausole.o vettori.o
    modulo1: $(objects) 
    	cc -o modulo1 $(objects) -lm
    main.o: solver.o modulo1.o clausole.o vettori.o main.c \
    				letterali.h vettori.h clausole.h solver.h
    	cc -c main.c 
    modulo1.o: solver.o vettori.o clausole.o  modulo1.c letterali.h \
    				vettori.h clausole.h solver.h modulo1.h
    	cc -c modulo1.c 
    solver.o: vettori.o clausole.o solver.c 
    	cc -c solver.c
    clausole.o: vettori.o clausole.c vettori.h letterali.h clausole.h
    	cc -c clausole.c 
    vettori.o: vettori.c vettori.h
    	cc -c vettori.c
    
    .PHONY: clean
    clean:
    	rm $(objects) modulo1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.