Çapraz derleyici

Çapraz Derleyici üzerinde çalıştığı platformdan farklı olan platformlar için çalıştırılabilen kodlar üreten derleyicidir. Böyle bir araç, erişiminizde olmayan bir platform için kod derlenmesi gerektiğinde ya da böyle bir platform üzerinde kod derleme işleminin yapılmasının imkansız olduğu (gömülü sistemlerde olduğu gibi, mikrokontrolörler minimum bellek ile çalıştığı için derleme imkansız olur) durumlarda faydalı olabilir.
Çapraz Derleyicinin Kullanımı
Çapraz derleyicinin temel kullanımı çalışılan ortamın hedef ortamdan ayrılması şeklinde tanımlanabilir. Bu kullanım çeşitli durumlar için faydalıdır;
Cihazın oldukça sınırlı kaynaklarının olduğu gömülü sistemler için kullanışlıdır. Bir mikro dalga fırının, ekranını okumak, kapı sensörünü izlemek, ekrana ve kulaklıklara çıkış vermek, pişirilen yemekler için kullanılan makineyi kontrol etmek için oldukça küçük bir bilgisayarı olacaktır. Bu bilgisayar bir derleyiciyi, dosya sistemini ya da herhangi bir geliştirme ortamını çalıştırmak için yeterince güçlü olamayacaktır.
Birden çok makineye derleme yapmak için kullanışlıdır. Örneğin, bir şirket kullanılan işletim sisteminin birkaç farklı versiyonunu desteklemek ya da farklı işletim sistemlerini desteklemek isteyebilir. Çapraz derleyici kullanarak, tek bir çalışma ortamı üzerinde birden fazla hedef platform için derleme yapılabilir.
Birden fazla makine için yapılan derleme işlemine benzer olarak, pek çok derleme işlemini gerektiren karmaşık bir kurulum, makinenin markasına veya işletim sisteminin tipine bakmaksızın herhangi bir makine üzerinden gerçekleştirilebilir.
Yeni bir platforma bootstrapping yapılmasına olanak verir. Yeni bir platform ya da gelecek bir platformun emülatörü için yazılım geliştirilirken, tasarımcı işletim sistemi ve yerel derleyici (native compiler) gibi gerekli araçları derlemek için çapraz derleyici kullanır.
GCC Çapraz Derleyici
gcc onlarca platformu ve yaygın olarak kullanılan programlama dillerini destekleyen bir çapraz derleyicidir. Bununla birlikte, derleyiciyi geliştirmeye çalışan gönüllü insanların sınırlı zamanları ve bir çapraz derleyiciyi çalışır hale getirmenin gerektirdiği uğraş, bazı sürümlerin hatalardan dolayı çalışmamasına neden olmaktadır.
gcc nin hedef platformlar için çalışması, hedef platform için hazırlanmış binutils in ikili dosyalarını gerektirmektedir. Bunlar arasında en önemli olanlardan biri GNU Assembler dır. Bu yüzden öncelikle binutils configure betiğine --target=some-target parametresi geçirilerek derlenmelidir. Bunun ardından eğer binutils in oluşturduğu araçlar path ile tanımlı dizinde ise gcc yi derleme işlemi normal bir şekilde gerçekleştirilebilir. bash kullanan unix benzeri işletim sistemlerinde, bahsedilen tanımlama aşağıdaki şekilde gerçekleştirilebilir;
PATH=/path/to/binutils/bin:$PATH; make
Çapraz derleme, derleme işleminin yapıldığı platform üzerinde hedef platform için bir takım standart C kütüphanelerinin bulunmasını gerektirir. En azından kütüphanenin crt0, ... parçalarının olması gereklidir. Diğer bir alternatif, C kütüphanesinin kaynak dosyaları derlemek için gerekli sadece temel parçalarını içeren newlib kullanılmasıdır. gcc yi newlib ile yapılandırmak için configure betiğine --with-newlib parametresini geçirmek yeterli olur.
Canadian Cross
Bu da farklı makineler için çapraz derleyici geliştirmenin yöntemlerinden biridir. Yani, B makinesi üzerinde çalışıp C makinesi için çalıştırılabilir kodlar üretecek çapraz derleyicinin A makinesi üzerinde geliştirilmesidir. Canadian Cross ile gcc kullanıldığı zaman, 4 derleyiciye ihtiyaç duyulabilir;
A makinesinde:
A (1) makinesi için kullanılan yerel derleyiciyi kullanarak A (2) makinesi için gcc yerel derleyicisi elde edilir.
A (2) makinesi için gcc yerel derleyicisini kullanarak, B (3) makinesi için A makinesinden gcc çapraz derleyicisi elde edilir.
A makinesinden B (3) makinesi için elde edilen çapraz derleyici kullanılarak, B makinesinden C (4) makinesi için gcc çapraz derleyicisi elde edilir.
Burada dikkat edilmesi gereken nokta elde edilen derleyici A makinesinde çalışmayacaktır. B makinası üzerinde gcc çapraz derleyicisini kullanarak B makinesinde, C (4) makinesinde çalışmak üzere kodlar derlendikten sonra elde edilen dosyalar C makinesine taşınıp çalıştırılmalıdır.