gcc: Linking Error: undefined reference to ‘tan’ Sorununun Çözümü
Not: Sorun her ne kadar “tanjant” fonksiyonu üzerinden anlatılmışsa da diğer kütüphanelerle ilgili çıkan aynı sorunların çözümü içinde kullanılabilir. Burada sadece “tanjant” fonksiyonu örnek alınarak anlatılmıştır.
#include <stdio.h>
#include <math.h>
int main(){
int x = 45;
double sonuc = tan(x);
printf("Sonuc: %d", sonuc);
}
Yukarıdaki kodu hesap.c olarak kaydedip aşağıdaki gibi derlediğimizde:
$ gcc hesap.c -o hesap
aşağıdaki bağlama(linking) hatasını alırız:
/tmp/ccOTnqUQ.o: In function `main’:
hesap.c:(.text+0x1f): undefined reference to `tan’
collect2: ld returned 1 exit status
Bu sorunu aşabilmek için “tan” fonksiyonunu barındıran nesne dosyalarının (object files) bulunduğu bir arşiv dosyası olan “libm.a” dosyasını bağlamak(link) gerekir. Bunu gerçekleştirmek için:
$ gcc hesap.c /usr/lib/libm.a -o hesap
komutuyla “/usr/lib/” dizinindeki matematik kütüphanesi olan “libm.a” arşiv dosyasını bağlarız.
Her seferinde uzun şekilde dizini belirtmek yerine:
$ gcc hesap.c -lm -o hesap
şeklinde bir çağırımla da bağlama yapabiliriz. Buradaki -l seçeneği linker için yazıldığını gösterir, “m” ise “libm.a” dosya adındaki “m” harfini gösterir. Büyük programlarda bir çok bağlama seçeneği yazıldığı için bu kısayol işimizi kolaylaştırır.
Kaynaklar ve Yararlı Bağlantılar
http://www.network-theory.co.uk/docs/gccintro/gccintro_17.html
http://joysofprogramming.com/undefined-reference-to-tan/
İyi Çalışmalar…


