Di programmazione C – “Undefined symbol a cui fa riferimento nel file”

Sto cercando di scrivere un programma per approssimare pi. Semplicemente prende punti casuali tra 0,00 e 1,00 e li confronta con il limite di un cerchio, e il rapporto tra i punti all’interno del cerchio e il totale dei punti dovrebbero approccio pi (molto rapida spiegazione, la specifica va in profondità molto di più).

Tuttavia, ricevo il seguente errore durante la compilazione con gcc:

Undefined                       first referenced
symbol                          in file
pow                             /var/tmp//cc6gSbfE.o
ld: fatal: symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

Quello che sta succedendo qui? Non ho mai visto questo errore, prima, e io non so perché è venuta. Ecco il mio codice (se non ho completamente testato dal momento che non posso superare l’errore):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void) {
    float x, y;
    float coordSquared;
    float coordRoot;
    float ratio;
    int n;
    int count;
    int i;

    printf("Enter number of points: ");
    scanf("%d", &n);

    srand(time(0));

    for (i = 0; i < n; i++) {
        x = rand();
        y = rand();

        coordSquared = pow(x, 2) + pow(y, 2);
        coordRoot = pow(coordSquared, 0.5);

        if ((x < coordRoot) && (y < coordRoot)) {
            count++;
        }
    }

    ratio = count / n;
    ratio = ratio * 4;

    printf("Pi is approximately %f", ratio);

    return 0;
}
  • Solo una nota, non utilizzare pow(x,2), utilizzare x*x. Più semplice e più veloce.
InformationsquelleAutor | 2012-11-07

 

3 Replies
  1. 6

    utilizzare -lm durante la compilazione(o collegamento) per includere la libreria math.

    Come questo: gcc yourFile.c -o yourfile -lm

  2. 2

    L’errore è generato dal linker, ld. Sta dicendo che il simbolo pow non può essere trovato (non è definita in tutti i file oggetto gestito dal linker). La soluzione è quella di includere la libreria che include l’attuazione del pow() funzione, libm (m per la matematica). [1] Aggiungere il -lm passare alla riga di comando del compilatore invocazione (dopo che tutti i file di origine specifiche) per fare in modo, ad esempio,

    gcc -o a.out source.c -lm

    [1] in Alternativa, si potrebbe avere la tua propria implementazione di pow() in un’unità di traduzione separata o di una biblioteca, ma si dovrebbe ancora dire al compilatore/linker dove trovarlo.

Lascia un commento