GNU Libc'nin Yapılandırılması ve Derlenmesi
Önceki Ek C. GNU C Kütüphanesinin Kurulması Sonraki
GNU Libc'nin Yapılandırılması ve Derlenmesi
GNU libc kaynak ağacının kök dizininde derlenemez. Ayrı bir build dizininde derlemelisiniz. Örneğin, glibc kaynak paketini /usr/src/gnu/glibc-2.4 dizinine açtıysanız, /usr/src/gnu/glibc-build adında bir dizin daha oluşturup derlenen nesne dosyalarının bu dizinde bulunmasını sağlamalısınız. Böylece, derleme sırasında bir hata oluşursa basitçe bu dizini içindekilerle birlikte silip yeniden temiz bir derleme yapabilirsiniz.
configure betiğini /usr/src/gnu/glibc-build dizininden aşağıdaki komutla çalıştırırsanız, derleme sırasında nesne dosyaları bu dizinde yer alacaktır:
$ ../glibc-2.4/configure argümanlar…
Burada anlatıldığı gibi paketi ayrı bir dizinde derlerken bile kaynak dizindeki bazı dosyaların derleme sırasında değişeceğini bilmelisiniz. Özellikle manual dizinindeki dosyalar bundan etkilenecektir.
configure betiği çok sayıda seçenek kabul eder, ancak burada önemli olan tek bir seçenek üzerinde duracağız: --prefix. Bu seçenek ile glibc'nin kurulmasını istediğiniz yeri belirtebilirsiniz. Bu seçenek için /usr/local öntanımlıdır fakat standart sistem kütüphanesi olarak bu seçenek GNU/Linux sistemleri için --prefix=/usr, GNU/Hurd sistemleri için ise --prefix= (boş önekle) biçiminde belirtilmelidir.
Ayrıca, configure betiği çalıştırılırken CC ve CFLAGS değişkenlerini de ortama dahil etmek yararlı olabilir. CC değişkeni ile kullanılacak C derleyicisi, CFLAGS ile derleyicinin kullanacağı eniyilemeler belirtilebilir.
configure betiğinde kullanılabilecek komut satırı seçeneklerinin listesi:
--prefix=dizin
Makineye bağımlı veri dosyaları dizin dizininin alt dizinlerine kurulur. Öntanımlı olarak /usr/local dizinidir.
--exec-prefix=dizin
Kütüphane ve makineye bağımlı diğer veri dosyaları dizin dizininin alt dizinlerine kurulur. Öntanımlı değeri eğer belirtilmişse --prefix seçeneğinde belirtilen dizindir, aksi takdirde /usr/local dizinidir.
--with-headers=dizin
Çekirdek başlık dosyaları /usr/include dizininde değil, dizin dizininde aranır. Glibc normalde /usr/include dizine bakar, ancak bu seçenekle farklı bir dizin belirtirseniz dizin dizinine bakar.
Bu seçenek öncelikli olarak /usr/include içindeki başlık dosyaları glibc'nin daha eski bir sürümünden gelen bir sistemde yararlı olur. Bu durumda kimi vakit çelişkiler oluşur. Linux libc5'in glibc'nin daha eski bir sürümünü nitelediğine dikkat edin. Bu seçeneği ayrıca glibc'yi /usr/include içindeki dosyalardan daha yeni bir çekirdeğin başlık dosyalarıyla derlemek isterseniz de kullanabilirsiniz.
--enable-add-ons[=liste]
Derleme sırasında dahil edilecek eklentiler belirtilir. Eğer bu seçenek listesiz olarak belirtilirse, ana kaynak dizininde bulunan bütün eklentiler etkinleştirilir; bu öntanımlı davranıştır. Etkin olmasını istediklerinizin listesini aralarına boşluk veya virgül koyarak belirtebilirsiniz (boşluk kullanacaksanız onları kabuktan korumak için tırnak içine almayı unutmayın). liste içindeki her eklenti bir mutlak dizin ismi olabileceği gibi ana kaynak dizinine göreli bir dizin ismi, hatta derleme dizinine (yani, o anki çalışma dizinine) göreli bir dizin ismi olabilir. Örnek: --enable-add-ons=nptl,../glibc-libidn-2.4.
--enable-kernel=sürüm
Bu seçenek şimdilik sadece GNU/Linux sistemlerinde kullanışlıdır. sürüm parametresi X.Y.Z şeklinde belirtilmeli ve üretilen kütüphanenin destekleyeceği en küçük Linux çekirdeğinin sürümü olmalıdır. Daha yüksek sürüm numarası daha az uyumluluk kodu ekler ve kod daha hızlı olur.
--with-binutils=dizin
C derleyicinin öntanımlı kullandığı değil, dizin ile belirtilen yerdeki binutils (çevirici ve ilintileyici) kullanılır. Eğer GNU C kütüphanesindeki oluşumlar sisteminizdeki öntanımlı binutils ile çalışamayacaksa bu seçeneği kullanabilirsiniz. Bu durumda, configure sorunu saptar ve bu oluşumları bastırır, böylece kütüphane hala kullanılabilir kalabilir, ancak işlevsellik kaybolabilir; örneğin, eski binutils ile bir paylaşımlı libc derleyemezsiniz.
--without-fp
Makinenin donanımında kayan noktalı sayılar için destek yoksa ve işletim sistemi de bu desteği yazılımsal olarak içermiyorsa bu seçeneği kullanmalısınız.
--disable-shared
Mümkün olsa bile paylaşımlı kütüphaneler oluşturulmaz. Tüm sistemlerde paylaşımlı kütüphane desteği yoktur; paylaşımlı kütüphaneler için ELF desteği ve GNU ilintileyici gerekir.
--disable-profile
Kütüphaneler profil desteği ile derlenmez. Profil desteğine ihtiyacınız olmayacağını düşünüyorsanız bu seçeneği kullanabilirsiniz.
--enable-omitfp
Normal (durağan ve paylaşımlı) kütüphaneler için en yüksek eniyileme kullanılır ve durağan kütüphaneler ayrı olarak hata ayıklama bilgileri ile eniyilemesiz derlenir. Bunu yapmanızı tavsiye etmiyoruz. Fazladan bir eniyileme size fazla birşey kazandırmadığı gibi derleyici hatalarını uyandırabilir ve C kütüphanesi üzerinden hataları izlemek mümkün olmayabilir.
--disable-versioning
Paylaşımlı kütüphaneleri sembol sürüm bilgileri ile derlemez. Böyle yaparak derlenen kütüphane eski ikilik dosyalarla uyumsuz olacaktır, bu bakımdan tavsiye edilmez.
--enable-static-nss
NSS kütüphanelerinin durağan sürümleri derlenir. Bu NSS'in amacını bozacağından tavsiye edilmez; NSS kütüphaneleriyle durağan ilintili bir yazılım farklı bir isim veritabanını kullanmak için yeniden özdevimli olarak yapılandırılamaz.
--without-tls
Öntanımlı olarak C kütüphanesi evreye özel saklama alanı (thread-local storage) desteği ile derlenir. Bu seçenek kullanılarak bunun olmaması sağlanabilir ama uyumluluk sorunlarına yol açacağından genellikle böyle birşeye gerek yoktur.
--build=derleme-sistemi
--host=çalışma-sistemi
Bu seçenekler çapraz derleme için kullanılır.Her iki seçeneği de belirtirseniz ve derleme-sistemi ile çalışma-sistemi farklıysa, configure betiği glibc'yi çalışma-sistemi üzerinde derleme-sistemi olarak kullanılacak şekilde çapraz derlemeye hazırlar. Büyük ihtimalle --with-headers seçeneğine de ihtiyacınız olacaktır, ayrıca betiğin derleyici ve/veya binutils seçimlerini değiştirmek zorunda kalabilirsiniz.
Sadece --host seçeneğini kullanırsanız, betik sizin sisteminiz yerine belirttiğiniz sistem için sistemdeki mevcut derleme araçlarıyla derlenecek şekilde glibc'yi derlemeye hazırlar Bu daha alt seviyede bir işlemci belirtmek için yararlıdır. Örneğin, configure betiği sizin makinenizi i586-pc-linux-gnu olarak belirlemişse ve siz bunun yerine kütüphaneyi 386'lar üzerinde çalışacak şekilde derlemek isterseniz seçeneği --host=i386-pc-linux-gnu ya da sadece --host=i386-linux olarak belirtebilir ve CFLAGS değişkeninde derleyiciye --mcpu=i386 belirtebilirsiniz.
Sadece --build seçeneğinin belirtilmesi betiğin şaşırmasına sebep olacaktır.
Kütüphaneyi ve ilgili uygulamaları derlemek için make komutunu kullanın. Derleme sırasında epey bir çıktı üretilir, bazıları da hata gibi görünebilir ama değildir. make'in ürettiği iletiler *** içeriyorsa bunlar hata iletileridir. Bunlar bazı şeylerin yanlış gittiğini belirtirler.
Derleme işlemi yapılandırmanıza ve makinenizin hızına bağlı olarak biraz uzun sürebilir. Bazı karmaşık modüllerin derlenmesi çok uzun zaman alabilir, daha yavaş makineler için bu daha da artar. Eğer derleyici çökmüş gibi görünürse paniklemeyin, işini bitirmesini bekleyin.
Paralel derleme yapmak isterseniz make'e -j seçeneği ile uygun sayısal parametreleri vermeniz yeterlidir. Bunun için en son GNU make sürümüne ihtiyacınız var.
Bazı kütüphane oluşumlarının çalışıp çalışmadığını sınamak isterseniz sınama yazılımlarını derlemek ve çalıştırmak için make check komutunu verebilirsiniz. Bu işlem başarıyla tamamlanmazsa derlenen kütüphaneyi kullanmayın ve sorunun bilinenlerden biri olmadığını saptarsanız hatayı raporlayın. Hata raporlama hakkında daha fazla bilgi için Yazılım Hatalarının Raporlanması bölümüne bakınız. Bazı sınamaların yapılması root tarafından çalışıtırılmış olmamayı gerektirir. Glibc'yi derlerken ve sınarken ayrıcalıksız kullanıcı olmanızı öneririz.
Hataları raporlamadan önce sorunun sizin sisteminizden kaynaklanmadığından emin olmalısınız. Sınamalar (daha sonra da kurulum) /etc/passwd, /etc/nsswitch.conf, vb. sistem dosyalarını kullanır. Bu dosyaların hepsi doğru içeriğe sahip olmalıdır.
[GNU C Kütüphanesi Kılavuzu]'nu yazdırmaya hazırlamak isterseniz make dvi komutunu verin. Bunu yapabilmek için çalışan bir TeX kurulumuna ihtiyacınız vardır. Kılavuzun Info dosyaları pakette biçimlenmiş olarak zaten vardır. Bunları yeniden üretmek isterseniz make info komutunu verebilirsiniz ama bu gerekmez.
Kütüphane, Makeconfig içinde bulabileceğiniz bir miktar özel amaçlı yapılandırma parametresine sahiptir. Bunlar configparms dosyası ile değiştirilebilir. Bunları değiştirmek isterseniz derleme işlemini yapacağınız dizinde bir configparms dosyası oluşturun ve içine sisteminize uygun değerleri ekleyin. Bu dosya make tarafından derleme ortamına dahil edilir.
GNU C kütüphanesini çapraz derleme için yapılandırmak configparms içine bir kaç tanım ekleyerek kolayca yapılabilir. CC değişkenine kütüphaneyi kendisi için yapılandıracağınız hedef derleyiciyi atayabilirsiniz; bu değerin configure betiğini çalıştırırken kullanılacak CC değeri ile aynı olması önemlidir. Örnek: CC=hedef-gcc configure hedef. Derlenen kütüphanenin parçası olacağı sistemde çalışacak yazılımlar için kullanılacak derleyiciyi BUILD_CC değişkenine atayın. Eğer yerel araçlar hedefteki nesne dosyaları ile çalışacak şekilde yapılandırılmamışsa, hedef sistemde çalışacak ar ve ranlib araçlarını AR ve RANLIB değişkenlerinde belirtmeniz gerekebilir.
Önceki Üst Ana Başlık Sonraki
Ek C. GNU C Kütüphanesinin Kurulması Başlangıç C Kütüphanesinin Kurulması
Bir Linux Kitaplığı Sayfası