İçeriğe atla

Ç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 imkânsız olduğu (gömülü sistemlerde olduğu gibi, mikrokontrolörler minimum bellek ile çalıştığı için derleme imkânsı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.

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Pascal (programlama dili)</span> yüksek seviyeli programlama dili

Pascal bilgisayar programlama dili pek çok öğrenciye bilgisayar programlamayı öğreten ve çeşitli versiyonları bugün hâlâ yaygın olarak kullanılmaya devam eden en önemli programlama dillerinden biridir. İlk Macintosh işletim sisteminin çoğu ve TeX Pascal ile yazılmıştır.

<span class="mw-page-title-main">GNU Compiler Collection</span>

GNU Compiler Collection, GNU Projesi tarafından üretilen ve çeşitli programlama dillerini destekleyen bir derleyici sistemidir. GCC, GNU araç zincirinin önemli bir parçasıdır. Henüz tamamlanmamış GNU işletim sisteminin resmî derleyicisi olmanın yanı sıra, diğer birçok modern Unix benzeri işletim sistemleri tarafından standart derleyici olarak benimsenmiştir. GCC, çok çeşitli işlemci mimarilerine taşınmış; ticari, perakende ve kapalı kaynak yazılım geliştirme ortamlarında yaygın bir araç olarak konuşlanmıştır. Windows'ta GCC kodlarını derlemek ve çalıştırmak için Cygwin, MinGW ve Tiny C Derleyici (TCC) gibi derleyiciler kullanılabilir.

<span class="mw-page-title-main">Java</span> açık kaynak kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen bir programlama dili

Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kaynak kodlu, nesneye yönelik, platform bağımsız, yüksek verimli, çok işlevli, yüksek seviye, hem yorumlanan hem de derlenen bir dildir.

<span class="mw-page-title-main">Derleyici</span> kaynak kodunu bilgisayarın işleyebileceği koda dönüştüren program

Derleyici, kaynak kodu makine koduna dönüştüren yazılımdır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyanın oluşturulmasını sağlar. Bu eyleme derleme denir. Bir başka ifadeyle derleyici, bir tür yazı işleyicidir; girdi olarak yazı alır ve çıktı olarak yazı verir.

<span class="mw-page-title-main">Make</span>

Make dosyaları bir formdan diğerini çevirme işlemini otomatikleştiren bir araçtır. Bu işlemi, çevrilecek programların ihtiyaç duyacağı diğer programları kontrol ettikten sonra gerekli programları çalıştırarak çevirme işlemini gerçekleştirir. Çevrilen programı çalıştırmak için ihtiyaç duyulan diğer programlara bağımlılıklar denir. Unix/Linux tabanlı işletim sistemlerinde, kaynak kodu nesne koduna derlerken ve nesne kodlarını çalıştırılabilir (executable) ve kütüphane (library) dosyalarına bağlarken (linking) sıklıkla kullanılır. Bağımlılık grafiğini çıkarmak için "Makefile" ismi verilen bir dosya kullanır ve shell'e geçirilmek üzere kullanılan betikleri (script) oluşturur.

GNU Assembler (GAS), shellden kullanıldığı zaman as olarak çağrılan GNU Assembler komutudur. GNU derleyici koleksiyonunun temel ve varsayılan derleyicisi olup Linux ve GNU işletim sistemlerinin derlenmesinde kullanılır. GNU Binutils paketinin bir parçasıdır.

<span class="mw-page-title-main">Assembly</span> uygulanan işlemlerle programlama dilinin birbirine çok yakın olduğu düşük seviye programlama dilleri

Assembly dili, bir işlemcinin komut kümesi üzerine tanımlanmış alt seviye bir dildir. Assembly dili kolay hatırlanabilir semboller tanımlar ve böylece işlemcinin makina koduna karşılık gelen sayı dizilerinin bilinmesine gerek kalmaz. Assembly dili, platformdan bağımsız yüksek seviyeli programlama dillerinin aksine, işlemci mimarisine bağımlıdır. Tipik uygulamaları; cihaz sürücüleri, alt seviyeli dahili (embedded) ve gerçek zamanlı sistemlerdir. Bır assembly programı assembler kullanılarak makine koduna çevrilir.

Berimsel bilimlerde Duff aygıtı, Assembly Dilinde yüksek başarıma izin veren döngü çözme tekniğini kullanan seri kopyalama yordamına ait bir uygulamadır. Tom Duff'ın Lucasfilm'de görev yaptığı Kasım 1983'te bulguladığı yöntem, C programlama dilindeki switch yapısının en ilginç kullanımlarından birini oluşturmaktadır. Duff, yalnızca bu yöntemi bulguladığını savunmakta ve genel döngü çözme yöntemi üzerinde herhangi bir hak iddia etmemektedir.

<span class="mw-page-title-main">Code::Blocks</span>

Code::Blocks, özgür açık kaynak kodlu bir C++ tümleşik geliştirme ortamıdır. wxWidgets tabanlı tamamen özelleştirilebilir arabirimiyle, GNU/Linux, Microsoft Windows, MacOS platformlarında sorunsuzca kullanılabilmektedir. Gelişmiş plugin desteğiyle kod yazımı esnasında ihtiyaç duyabileceğiniz birçok yardımcı fonksiyon sunar ve kod üzerinde tam bir hakimiyet kurmanıza olanak tanır.


Javac Oracle Corporation tarafından sağlanan Java Geliştirme Kiti'nda (JDK) bulunan Java derleyicisidir.

Java Geliştirme Kiti (JDK) Java geliştiricilerine yönelik bir Oracle Corporation ürünüdür. Java'nın kullanıma sunulmasından beri en geniş kullanım alanı bulan Java SDK'dır. 17 Ekim 2006'da, Sun GNU General Public License (GPL) altında sunulacağını duyurdu ki bu özgür yazılım olacağı anlamına geliyordu. Bunun gerçekleşmesi ise 8 Mayıs 2007'de oldu; Sun kaynak kodu OpenJDK'ya bağışladı.

<span class="mw-page-title-main">OpenMP</span>

OpenMP; Solaris, IBM AIX, HP-UX, GNU/Linux, MAC OS X ve Windows işletim sistemleri üzerinde çoğu işlemci mimarisi üzerinde Fortran, C++, C programlama dillerinde çoklu platform paylaşımlı bellek çoklu işlemeyi destekleyen bir uygulama geliştirme arayüzüdür, yani bir API'dir. OpenMP derleyici yönergelerinin kütüphane rutinlerini ve ortam değişkenlerinin çalışma zamanı davranışını etkileyen bir kümesini içerir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">Tiny C Derleyici</span>

Tiny C, Fabrice Bellard tarafından oluşturulmuş x86 ve ARM işlemciler için bir C derleyicidir. Küçük diskli ve yavaş bilgisayarlar için dizayn edilmiştir. 0.9.23 sürümünde Windows işletim sistemi desteği eklenmiştir. GNU Kısıtlı Genel Kamu Lisansı altında dağıtılmaktadır.

<span class="mw-page-title-main">Xcode</span>

Xcode macOS, iOS, watchOS, tvOS ve visionOS için yazılım geliştirmek için Apple tarafından geliştirilen macOS için entegre bir tümleşik geliştirme ortamıdır. Yazılım geliştirme araçlarını içerir. İlk kez 2003 yılında piyasaya çıkan hizmetin en istikrarlı sürümü, sürüm 8.3.3'tür ve Mac App Store'den macOS Sierra kullanıcıları için ücretsiz olarak sunulmaktadır. Kayıtlı geliştiriciler, Apple Developer web sitesinden paketi önizleme sürümlerini ve önceki sürümlerini indirebilirler. Bununla birlikte, Apple son zamanlarda yazılımın sürüm 9 beta 2'nin beta versiyonunu Apple Developer hesaplarıyla halka açık hale getirdi.

GNU araç zinciri, GNU Tasarısı tarafından üretilen geniş bir programlama araçları yığınıdır. Bu araçlar, yazılım uygulamaları ve işletim sistemi geliştirmede kullanılan bir araç zinciri oluşturur.

JIT ; bilgisayar kodunu çalıştırmanın bir yoludur. Yürütülmeden önce bir program yürütülürken çalışma zamanında derleyici içerir. Genellikle bu, kaynak kodu ve daha sonradan makine diline bytecode kod çevirisini içerir ve bu kod doğrudan doğruya çalıştırılır. Bir JIT derleyicisi uygulayan bir sistem genellikle yürütülen kodu sürekli olarak analiz eder, daha sonra derleme veya tekrar derlemeden elde edilen hızlanmanın bu kodun derlenmesinin yükünden daha ağır olacağı kod bölümlerini tanımlar.

AOT derlemesi C veya C++ gibi daha üst düzey bir programlama dili, Java bytecode veya .NET Framework Ortak Ara Dil kodu gibi bir ara temsilciliğin yerli bir makine diline derleme eylemidir. Sonuçta ortaya çıkan ikili dosya yerel olarak çalıştırılabilir.

Clang, C ve C++ programlama dilleri için açık kaynaklı bir derleyici ailesidir. LLVM projesinin bir parçası olarak geliştirilen Clang, hızlı, kullanıcı dostu ve yüksek kaliteli bir derleme deneyimi sunar. C ve C++'ın yanı sıra, Objective-C ve Objective-C++ dillerini de destekler.