Grzegorz Brzęczyszczykiew
Guest
Mon Dec 29, 2008 11:45 pm
Witam.
Nakreślę problem:
Postanowiłem pobawić się trochę mikrokontrolerami pisząc w C . Ponieważ
dawno (całe lata świetlne) nie używałęm tego języka więc zanim zacznę
pisać konkretny programik na procka- postanowiłem najpierw zasymulować
to pisząc programik uruchamialny na PC. Używam Linux'a i GCC 4.3.2.
A teraz konkrety.
jest sobie taki kawałek programu (na potrzeby ilustracji):
=============================================
#include <stdio.h>
#include<math.h>
int main(void)
{
float i;
i=2;
printf ("%f\n",sin(i));
}
============================================
============================================
Komenda do kompilacji (plik nazwałem x.c):
$ cc -xc -o x x.c
============================================
============================================
Jako wynik kompilacji dostaję:
/home/user/tmp/cc6A7HHb.o: In function `main':
x.c

.text+0x20): undefined reference to `sin'
collect2: ld returned 1 exit status
Jeżeli wpiszę ostanią linie np tak:
printf ("%f\n",sin(2));
-program kompiluje się bez problemu i działa porawnie.
Z innymi funkcjami z biblioteki math.h jest podobnie jeżeli wywołuję
funkcję w której jako parametr występuje zmienna.
O co biega, bo google wypluwa kupę stron, ale nic konkretnego.
Pozdrawiam
G.B.
T.M.F.
Guest
Mon Dec 29, 2008 11:45 pm
Quote:
O co biega, bo google wypluwa kupę stron, ale nic konkretnego.
Dolacz oprocz naglowka biblioteke dla linkera. Przypuszczam, ze jesli
uzywasz zamiast zmiennej stalej to wartosc wyliczana jest na etapie
kompilacji i linker juz nie potrzebuje ciala funkcji sin.
Zbych
Guest
Mon Dec 29, 2008 11:45 pm
Grzegorz Brzęczyszczykiewicz pisze:
Quote:
Komenda do kompilacji (plik nazwałem x.c):
$ cc -xc -o x x.c -lm
^^^^^^^
zapomniałeś o dołączeniu biblioteki matematycznej (-lm)
Quote:
Jako wynik kompilacji dostaję:
/home/user/tmp/cc6A7HHb.o: In function `main':
x.c

.text+0x20): undefined reference to `sin'
collect2: ld returned 1 exit status
Jeżeli wpiszę ostanią linie np tak:
printf ("%f\n",sin(2));
-program kompiluje się bez problemu i działa porawnie.
bo sin(2) jest obliczany na etapie kompilacji programu i funkcja sinus
nie jest w ogóle wywoływana.