Dlaczego ten kompilacja i uruchamia to W / O "-LM" włączyć GCC:

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

int main()
{
    printf("2 to the 8th power is %f\n",pow(2.0,8.0));
    return(0);
}

Ale to:

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

int main()
{
    float a,b;
    a = 2.0;
    b = 8.0;
    printf("2 to the 8th power is %f\n",pow(a,b));
    return(0);
}

Podaje błąd:

undefined reference to `pow'

Chyba że połączenie biblioteki matematycznej z -lm

Zachowanie jest takie samo, jeśli używam podwójnych, a nie unosić się. Czy jest jakiś rodzaj funkcji podstawowej Pow () ukryty w standardowej bibliotece lub jest łącznik po prostu zrezygnował z pracy z idiotami i łączy bibliotekę matematyczną dla naprawdę prostych przypadków?

Używam GCC (Ubuntu 9.3.0-17ubuntu1 ~ 20.04) 9.3.0, jeśli to ma jakąkolwiek różnicę. To nie jest wielka sprawa, ciekawa, dlaczego tak się dzieje, dzięki!

c
1
Gordon Burgess 20 październik 2020, 20:55

1 odpowiedź

Najlepsza odpowiedź

Miałem siebie, problem zrozumienia, co jest nie tak z powyższym. Mam takie samo zachowanie z gcc -O0. Uruchamianie wykonywalne za pomocą strace i gdb pokazano, że w ogóle nie ma połączenia z funkcją.

Pordaczył głowę, przeczytaj kilka komentarzy i dostałem go. Ja sam, domyśliłbym odpowiedź godzinami. Wszystkie kredyty idą do komentatorów

Spróbuj zmienić swój kod na

....
double t = (int)(2.0 + 1.0) % 2 + 1.0;
double r = pow(2.0+t,8.0);
....

Z flagą -O0 powinieneś mieć wiadomość undefined reference to 'pow'.

1
user14063792468 20 październik 2020, 18:23