Çapraz derleyici - Cross compiler

Bir derleyici a, derleyici oluşturma yeteneğine çalıştırılabilir bir kodu platformu derleyici çalıştığı dışındaki. Örneğin, bir bilgisayarda çalışan ancak Android akıllı telefonda çalışan kod üreten bir derleyici, çapraz derleyicidir.

Bir geliştirme ana bilgisayarından birden çok platform için kod derlemek için bir çapraz derleyici gereklidir. Hedef platformda doğrudan derleme, örneğin sınırlı bilgi işlem kaynaklarına sahip gömülü sistemlerde mümkün olmayabilir .

Çapraz derleyiciler, kaynaktan kaynağa derleyicilerden farklıdır . Bir çapraz derleyici, makine kodunun platformlar arası yazılım üretimi içindir, kaynaktan kaynağa bir derleyici ise bir programlama dilinden diğerine metin kodunda çevirir. Her ikisi de programlama araçlarıdır .

Kullanmak

Çapraz derleyicinin temel kullanımı, yapı ortamını hedef ortamdan ayırmaktır. Bu, birkaç durumda yararlıdır:

  • Bir aygıtın son derece sınırlı kaynaklara sahip olduğu yerleşik bilgisayarlar . Örneğin, bir mikrodalga fırın, tuş takımını ve kapı sensörünü okumak, dijital bir ekrana ve hoparlöre çıktı sağlamak ve yemek pişirmek için makineyi kontrol etmek için son derece küçük bir bilgisayara sahip olacaktır. Bu bilgisayar genellikle bir derleyici, dosya sistemi veya geliştirme ortamı çalıştıracak kadar güçlü değildir.
  • Birden fazla makine için derleme. Örneğin, bir şirket bir işletim sisteminin birkaç farklı sürümünü desteklemek veya birkaç farklı işletim sistemini desteklemek isteyebilir. Bir çapraz derleyici kullanarak, bu hedeflerin her biri için derlemek üzere tek bir oluşturma ortamı ayarlanabilir.
  • Bir sunucu grubunda derleme . Birden çok makine için derlemeye benzer şekilde, temel donanımına veya çalıştırdığı işletim sistemi sürümüne bakılmaksızın, ücretsiz olan herhangi bir makinede birçok derleme işlemi içeren karmaşık bir yapı yürütülebilir.
  • Yeni bir platforma önyükleme . Yeni bir platform veya gelecekteki bir platformun öykünücüsü için yazılım geliştirirken, işletim sistemi ve yerel bir derleyici gibi gerekli araçları derlemek için bir çapraz derleyici kullanılır.
  • Mevcut bir platformda çalışan çapraz derleyiciler kullanan meraklılar tarafından Commodore 64 veya Apple II gibi artık kullanılmayan eski platformlar için öykünücüler için yerel kod derlemek (örneğin, Windows XP altında çalışan Aztec C'nin MS-DOS 6502 çapraz derleyicileri ).

Kullanımı sanal makinelerde (örneğin Java'nın olarak JVM ) çapraz derleyiciler geliştirilmiştir hangi nedenlerden bazıları giderir. Sanal makine paradigması, aynı derleyici çıktısının birden çok hedef sistemde kullanılmasına izin verir, ancak bu her zaman ideal olmasa da, sanal makineler genellikle daha yavaştır ve derlenen program yalnızca bu sanal makineye sahip bilgisayarlarda çalıştırılabilir.

Tipik olarak donanım mimarisi farklıdır (örneğin , bir x86 bilgisayarında MIPS mimarisine yönelik bir programın derlenmesi ), ancak çapraz derleme, Linux altında bir FreeBSD programı derlerken veya hatta yalnızca sistem kitaplığı gibi yalnızca işletim sistemi ortamı farklı olduğunda da uygulanabilir. , programları bir glibc ana bilgisayarında uClibc ile derlerken olduğu gibi .

Kanada Haçı

Kanadalı Çapraz diğer makineler için çapraz derleyiciler oluşturmak için bir tekniktir. Üç makineler A, B ve C, bir kullandığı makine A (örn çalışan Verilen Windows XP bir de IA-32 işlemcisi) makine B çalışır (örneğin çalışan bir çapraz derleyici oluşturmak için Mac OS X , bir de x86-64 işlemci) için C makinesi için yürütülebilir dosyalar oluşturun (örneğin, Android'i bir ARM işlemcisinde çalıştırmak ). GCC ile Canadian Cross'u kullanırken, dahil olan dört derleyici olabilir

  • Makine A (1) için özel doğal Derleyici (örn derleyici Microsoft Visual Studio ) oluşturmak için kullanılan makine A (2) için gcc doğal derleyici .
  • Makine A gcc doğal derleyici (2) oluşturmak için kullanılan makine B makine A gcc çapraz derleyici (3)
  • Makine B makine A gcc derleyici (3) oluşturmak için kullanılan makine C'ye makinesi B'den gcc çapraz derleyici (4)

Kanada Haçı örneği, şema

Nihai sonuç çapraz derleyicisi (4), yapı makinesi A üzerinde çalışamayacaktır; bunun yerine, bir uygulamayı yürütülebilir kodda derlemek için B makinesinde çalışır, bu daha sonra C makinesine kopyalanır ve C makinesinde yürütülür.

Örneğin, NetBSD , ana bilgisayarın derleyicisiyle ilk önce kendi araç zincirini oluşturacak adlı bir POSIX Unix kabuk betiği sağlar ; bu da tüm sistemi oluşturmak için kullanılacak çapraz derleyiciyi oluşturmak için kullanılacaktır. build.sh

Kanada Haçı terimi , bu konuların tartışıldığı sırada Kanada'nın üç ulusal siyasi partisine sahip olduğu için ortaya çıktı.

Erken çapraz derleyicilerin zaman çizelgesi

  • 1979 – ALGOL 68C , ZCODE'u oluşturdu ; bu, derleyicinin ve diğer ALGOL 68 uygulamalarının alternatif platformlara taşınmasına yardımcı oldu. ALGOL 68C derleyicisini derlemek için yaklaşık 120 KB bellek gerekliydi. İle Z80 onun 64 KB bellek aslında derleyici derlemek için çok küçük. Dolayısıyla Z80 için derleyicinin kendisinin daha büyük CAP yetenekli bilgisayardan veya bir IBM System/370 ana bilgisayarından çapraz derlenmesi gerekiyordu .

GCC ve çapraz derleme

Derleyicilerin ücretsiz bir yazılım koleksiyonu olan GCC , çapraz derleme için ayarlanabilir. Birçok platformu ve dili destekler.

GCC, hedeflenen her platform için derlenmiş bir binutils kopyasının bulunmasını gerektirir . Özellikle önemli olan GNU Assembler'dır . Bu nedenle, binutils ilk önce configure betiğine--target=some-target gönderilen anahtarla doğru bir şekilde derlenmelidir . GCC'nin de aynı seçenekle yapılandırılması gerekir . GCC daha sonra, binutils'in oluşturduğu araçların path içinde mevcut olması koşuluyla normal şekilde çalıştırılabilir ve bu , aşağıdakiler kullanılarak yapılabilir (bash ile UNIX benzeri işletim sistemlerinde): --target

PATH=/path/to/binutils/bin:${PATH} make

GCC bir kısmı gerektirir çapraz derleme hedef platform' in Cı standart kitaplığı bulunmayabilir ana platform . Programcı tam C kitaplığını derlemeyi seçebilir, ancak bu seçim güvenilmez olabilir. Bunun alternatifi, yalnızca C kaynak kodunu derlemek için gereken en temel bileşenleri içeren küçük bir C kitaplığı olan newlib kullanmaktır .

GNU Autotools paketleri (yani autoconf , automake ve Libtool ) bir nosyonunu kullanmak inşa platformu , bir konak platformu ve hedef platformu . İnşa platformu derleyici aslında derlenmiş yerdir. Çoğu durumda, derleme tanımsız bırakılmalıdır (varsayılan olarak ana bilgisayardan alınır). Ana bilgisayar platformu , çıktı başka bir derleyici olsa da olmasa da her zaman derleyiciden gelen çıktı yapılarının yürütüleceği yerdir. Hedef platform çapraz derleyici çapraz derleme kullanıldığında, nesne kodu üretmez paketi ne tür temsil eder; aksi takdirde hedef platform ayarı önemsizdir. Örneğin, Dreamcast'te çalışacak bir video oyununu çapraz derlemeyi düşünün . Oyunun derlendiği makine yapı platformudur , Dreamcast ise ana bilgisayar platformudur . Ana bilgisayar ve hedef adları , son ve torun gibi kullanılan ve kaydırılan derleyiciye göredir .

Halk gömülü Linux geliştiricileri tarafından kullanılan bir başka yöntem gibi uzmanlaşmış sanal alanlara sahip GCC derleyici kombinasyonunu içerir Scratchbox , scratchbox2 veya PRoot . Bu araçlar , programcının fazladan yollar ayarlamak zorunda kalmadan gerekli araçları, libc'yi ve kitaplıkları oluşturabileceği bir " chroot edilmiş " sanal alan oluşturur. Çalışma zamanını gerçekten amaçlanan hedef CPU'da (bir ARM mimarisi gibi) çalıştığına "inanması" için "aldatmak" için olanaklar da sağlanmıştır; bu, yapılandırma komut dosyalarının ve benzerlerinin hatasız çalışmasına izin verir. Scratchbox, "chroot yapılmayan" yöntemlere kıyasla daha yavaş çalışır ve ana bilgisayardaki çoğu aracın çalışması için Scratchbox'a taşınması gerekir.

Manx Aztek C çapraz derleyiciler

Manx Yazılım Sistemleri arasında Shrewsbury , New Jersey , üretilen C derleyicileri 1980'lerde başlayan dahil çeşitli platformlarda kadar ve profesyonel geliştiricileri hedefleyen PC'ler ve Mac'ler .

Manx'ın Aztek C programlama dili , MS-DOS , Apple II , DOS 3.3 ve ProDOS , Commodore 64 , Macintosh 68XXX ve Amiga dahil olmak üzere çeşitli platformlar için mevcuttu .

1980'lerden ve 1990'lar boyunca Manx Yazılım Sistemleri ortadan kalkıncaya kadar devam eden Aztec C'nin MS-DOS sürümü, hem yerel mod derleyicisi olarak hem de Commodore 64 ve Apple II dahil olmak üzere farklı işlemcilere sahip diğer platformlar için bir çapraz derleyici olarak sunuldu. Aztek C için MS-DOS tabanlı çapraz derleyiciler de dahil olmak üzere İnternet dağıtımları hala mevcuttur. Bugün hala kullanılıyorlar.

Manx'ın Aztec C86'sı, yerel modları 8086 MS-DOS derleyicisi de bir çapraz derleyiciydi. Commodore 64 ve Apple II için Aztec C65 6502 çapraz derleyicileri gibi farklı bir işlemci için kod derlememiş olsa da, 16-bit 8086 işlemci ailesi için o zamanki eski işletim sistemleri için ikili yürütülebilir dosyalar yarattı.

IBM PC ilk piyasaya sürüldüğünde, CP/M-86 ve PC DOS olmak üzere bir dizi işletim sistemi seçeneğiyle mevcuttu . Aztec C86, her iki IBM PC işletim sistemi için kod üretmek için bağlantı kitaplıkları ile sağlandı . 1980'ler boyunca Aztek C86'nın (3.xx, 4.xx ve 5.xx) sonraki sürümleri, MS-DOS "geçici" sürüm 1 ve 2 için destek ekledi ve bunlar "temel" MS-DOS sürüm 3 ve Daha sonra Aztek C86'nın ölümüne kadar hedeflediği.

Son olarak, Aztec C86 üretmek yeteneği ile C dili geliştiriciler sağladı ROM mümkün "HEX" bundan sonra bir transfer edilebilir kod -ROM brülör bir 8086 tabanlı bir işlemci doğrudan. Paravirtualization bugün daha yaygın olabilir, ancak düşük seviyeli ROM kodu oluşturma uygulaması, cihaz sürücüsü geliştirmenin genellikle bireysel uygulamalar için uygulama programcıları tarafından yapıldığı ve yeni cihazların bir yazlık endüstrisi anlamına geldiği o yıllarda kişi başına daha yaygındı . Uygulama programcılarının, üreticinin desteği olmadan doğrudan donanımla arayüz oluşturması alışılmadık bir durum değildi. Bu uygulama, günümüzdeki Gömülü Sistem Geliştirmeye benziyordu .

Thomas Fenwick ve James Goodnow II, Aztek-C'nin iki ana geliştiricisiydi. Fenwick daha sonra Microsoft Windows CE çekirdeğinin veya o zamanki adıyla NK'nin ("Yeni Çekirdek") yazarı olarak dikkate değer hale geldi .

Microsoft C çapraz derleyiciler

Erken tarih – 1980'ler

Microsoft C (MSC), 1980'lere dayanan diğerlerinden daha kısa bir geçmişe sahiptir. İlk Microsoft C Derleyicileri, Kafes C'yi yapan ve Microsoft tarafından kendilerinin olarak yeniden markalaştırılan aynı şirket tarafından yapıldı , Microsoft'un kendi ürettiği ilk sürüm olan MSC 4 piyasaya çıkana kadar.

1987'de birçok geliştirici Microsoft C'ye geçmeye başladı ve daha birçoğu Microsoft Windows'un bugünkü durumuna kadar geliştirilmesini takip edecekti. Clipper ve daha sonra Clarion gibi ürünler , çapraz dil tekniklerini kullanarak kolay veritabanı uygulaması geliştirmesi sunan ve programlarının bir kısmının Microsoft C ile derlenmesine izin veren ürünler ortaya çıktı.

Borland C (California şirketi), Microsoft'un ilk C ürününü piyasaya sürmesinden yıllar önce satın alınabilirdi.

Borland'dan çok önce, BSD Unix (Berkeley Üniversitesi), C dilinin yazarlarından C almıştı: AT&T (laboratuarlar) için çalışırken birlikte yazan Kernighan ve Ritchie . K&R'nin orijinal ihtiyaçları, asm 1. seviye ayrıştırılmış sözdizimini değiştirmek için yalnızca zarif 2. seviye ayrıştırılmış sözdizimi değildi: her platformu desteklemek için minimum miktarda asm yazılacak şekilde tasarlandı (C'nin orijinal tasarımı, C ile C kullanarak çapraz derleme yeteneğiydi). platform başına ihtiyaç duydukları en az destek kodu.). Ayrıca dünkü C, platforma bağlı olmayan her yerde doğrudan ASM koduyla ilgilidir. Günümüzün C'si (daha çok c++) artık C uyumlu değildir ve temel alınan asm kodu, belirli bir platformda yazılandan çok farklı olabilir (Linux'ta: bazen kitaplık çağrılarını distribütör seçimleriyle değiştirir ve saptırır). Günümüzün C'si, 2. seviye bir dil gibi eski şekilde kullanılan 3. veya 4. seviye bir dildir.

1987

C programları uzun zamandır montaj dilinde yazılmış modüllerle bağlantılıydı . Çoğu C derleyicisi (mevcut derleyiciler bile) bir montaj dili geçişi sunar (verimlilik için ince ayar yapılabilir ve ardından montajdan sonra programın geri kalanına bağlanabilir).

Aztec-C gibi derleyiciler her şeyi ayrı bir geçiş olarak derleme diline dönüştürdüler ve ardından kodu ayrı bir geçişte birleştirdiler ve çok verimli ve küçük kodları ile dikkat çektiler, ancak 1987'de Microsoft C'de yerleşik optimize edici çok iyiydi ve yalnızca Bir programın "görev açısından kritik" kısımları genellikle yeniden yazılmak üzere düşünülürdü. Aslında, programlamanın çok disiplinli bir büyüme endüstrisi haline gelmesi ve projelerin büyümesi, programcıların daha yüksek seviyeli dillerde kullanıcı arayüzleri ve veritabanı arayüzleri yazmasıyla birlikte C dili programlaması "en düşük seviyeli" dil olarak devralmıştı ve bir ihtiyaç vardı. günümüze kadar devam eden çapraz dil gelişimi için ortaya çıkmıştır.

1987'de MSC 5.1'in piyasaya sürülmesiyle Microsoft, MS-DOS için bir çapraz dil geliştirme ortamı sundu. Assembly dilinde ( MASM ) ve Microsoft'un QuickBASIC , Pascal ve Fortran dahil diğer dillerinde yazılan 16 bitlik ikili nesne kodu , "Karışık Dil Programlama" ve şimdi "Diller Arası Arama" olarak adlandırdıkları bir süreçte tek bir programa bağlanabilir. Eğer TEMEL bu karışımda kullanılan, ana program dahili desteklemek için BASIC olması gereken çalışma zamanı sistemi derlenmiş TEMEL bir TEMEL simüle bu da çöp toplama ve diğer yönetilen işlemler için gerekli olduğunu tercüman gibi QBasic MS-DOS.

Özellikle C kodu için çağrı kuralı , parametreleri yığında "ters sırada" iletmek ve değerleri bir işlemci kaydı yerine yığında döndürmekti . Tüm dillerin birlikte çalışmasını sağlamak için başka programlama kuralları vardı, ancak bu özel kural, Windows 16 ve 32 bit sürümleri boyunca devam eden çapraz dil geliştirme ve OS/2 için programların geliştirilmesi boyunca devam etti ve bu devam ediyor. gün. Pascal çağrı kuralı olarak bilinir .

Bu süre zarfında Microsoft C'nin kullanıldığı başka bir çapraz derleme türü, 8088 tabanlı bir barkod okuyucuyu hedefleyen bir bağlantı kitaplığı sağlayan Symbol Technologies PDT3100 ( envanter almak için kullanılır ) gibi elde taşınabilir cihazlar gerektiren perakende uygulamalarındaydı . Uygulama ana bilgisayarda oluşturuldu ve ardından Motorola gibi Symbol'ü satın alan şirketler tarafından Windows Mobile kullanılarak aynı pazar için bugün yapılana benzer şekilde çalıştırıldığı el cihazına ( seri kablo aracılığıyla ) aktarıldı .

1990'ların başı

1990'lar boyunca ve MSC 6 (ilk ANSI C uyumlu derleyicileri) ile başlayarak Microsoft, C derleyicilerini gelişmekte olan Windows pazarına ve ayrıca OS/2'ye ve GUI programlarının geliştirilmesine yeniden odakladı . Karışık dil uyumluluğu MS-DOS tarafında MSC 6 içinden kalmasına rağmen API ayrıca gelişmekte olan 32-bit meclisleri için destek ve destek sağlamak için genişletildi Microsoft Windows 3.0 ve 3.1 için MSC 6. MSC 6 yazılmış Windows for Workgroups ve Windows XP'nin temelini oluşturacak olan Windows NT . Monolitik 16 bit MS-DOS uygulamalarında tercih edilen statik bağlama yerine çalışma zamanı bağlamasından ( dinamik bağlama ) yararlanan 16 ve 32 bit programlar arasında geçişe izin vermek için thunk adı verilen bir programlama uygulaması tanıtıldı . Statik bağlama, bazı yerel kod geliştiricileri tarafından hala tercih edilmektedir, ancak genellikle Yetenek Olgunluk Modeli (CMM) gibi daha yeni en iyi uygulamaların gerektirdiği kod yeniden kullanım derecesini sağlamaz .

MS-DOS desteği, Microsoft'un C programlama dili ve MS-DOS ile geriye dönük olarak uyumlu olan ve hem 16 hem de 32 bit kod üretimini destekleyen ilk C++ Derleyicisi MSC 7'nin piyasaya sürülmesiyle birlikte sağlandı.

Aztec C86'nın kaldığı yerden MSC devraldı . C derleyicilerinin pazar payı, en yeni ve en büyük Windows özelliklerinden yararlanan, C ve C++'ı tek bir pakette sunan ve halen on yıllık MS-DOS sistemlerini destekleyen çapraz derleyicilere dönüşmüştü. Aztec C gibi üretilen derleyiciler artık rekabet edemedi ve ya gömülü sistemler gibi niş pazarlara yöneldi ya da ortadan kayboldu.

MS-DOS ve 16 bit kod oluşturma desteği , Microsoft'un bugün sağladığı çapraz geliştirme ortamı olan Microsoft Visual Studio'nun öncüsü olan Microsoft C++ ve Microsoft Application Studio 1.5 ile birlikte gelen MSC 8.00c'ye kadar devam etti .

1990'ların sonu

MSC 12, Microsoft Visual Studio 6 ile piyasaya sürüldü ve artık MS-DOS 16-bit ikili dosyaları için destek sağlamadı, bunun yerine 32-bit konsol uygulamaları için destek sağladı, ancak Windows 95 ve Windows 98 kod üretimi ile Windows NT için destek sağladı. . Microsoft Windows çalıştıran diğer işlemciler için bağlantı kitaplıkları mevcuttu; Microsoft'un bugüne kadar sürdürdüğü bir uygulama.

MSC 13, Visual Studio 2003 ile piyasaya sürüldü ve MSC 14, Visual Studio 2005 ile piyasaya sürüldü; bunların her ikisi de Windows 95 gibi daha eski sistemler için kod üretmeye devam ediyor, ancak mobil pazar ve ARM mimarisi dahil olmak üzere çeşitli hedef platformlar için kod üretecek .

.NET ve ötesi

2001'de Microsoft , Visual Studio IDE'deki .NET Framework derleyicilerinin çekirdeğini oluşturan Common Language Runtime'ı (CLR) geliştirdi . API'de bulunan işletim sistemindeki bu katman , Windows işletim sistemini çalıştıran platformlar arasında derlenen geliştirme dillerinin karıştırılmasına izin verir.

.NET Framework çalışma zamanı ve CLR, işlemci ve hedef bilgisayardaki aygıtlar için çekirdek rutinlere bir eşleme katmanı sağlar. Visual Studio'daki komut satırı C derleyicisi, çeşitli işlemciler için yerel kodu derler ve çekirdek rutinleri kendileri oluşturmak için kullanılabilir.

Gibi hedef platformlar için Microsoft .NET uygulamaları Windows Mobile üzerinde ARM mimarisi işlemciler ve Microsoft ayrıca ya gitti günlerde çapraz derleyici aksine çok az yapılandırma gerektirecek taklitçileri ve uzaktan dağıtım ortamları sunmak çeşitli Windows makinelerde çapraz derleme diğer platformlar.

Mono gibi çalışma zamanı kitaplıkları, çapraz derlenmiş .NET programları için Linux gibi diğer işletim sistemleriyle uyumluluk sağlar .

Qt gibi kitaplıklar ve XVT de dahil olmak üzere öncülleri , Windows sürümlerini oluşturmak için Microsoft C'yi kullanırken diğer platformlarla kaynak kodu düzeyinde çapraz geliştirme yeteneği sağlar. MinGW gibi diğer derleyiciler de, yazılım geliştirmenin Windows olmayan tarafını oluşturan Unix'lerle daha doğrudan uyumlu olduklarından, bu geliştiricilerin tanıdık bir yapı ortamı kullanarak tüm platformları hedeflemesine olanak tanıdığı için bu alanda popüler hale geldi.

Ücretsiz Pascal

Free Pascal , başlangıçtan itibaren bir çapraz derleyici olarak geliştirildi. Yürütülebilir derleyici (ppcXXX, burada XXX bir hedef mimaridir), aynı mimarinin tüm işletim sistemleri için yürütülebilir dosyalar (veya dahili bağlayıcı yoksa yalnızca nesne dosyaları veya dahili birleştirici yoksa yalnızca derleme dosyaları) üretme yeteneğine sahiptir. Örneğin, ppc386, i386-linux, i386-win32, i386-go32v2 (DOS) ve diğer tüm işletim sistemleri için yürütülebilir dosyalar üretebilir (bkz. ). Ancak başka bir mimariyi derlemek için önce derleyicinin bir çapraz mimari sürümü oluşturulmalıdır. Ortaya çıkan derleyici yürütülebilir dosyası, adındaki hedef mimariden önce ek 'ross'a sahip olacaktır. yani, derleyici x64'ü hedefleyecek şekilde oluşturulmuşsa, yürütülebilir dosya ppcrossx64 olacaktır.

Seçilen bir mimari-OS için derleme yapmak için derleyici anahtarı (derleyici sürücüsü fpc için) -P ve -T kullanılabilir. Bu aynı zamanda derleyicinin kendisini çapraz derlerken de yapılır, ancak CPU_TARGET ve OS_TARGET yap seçeneği ile ayarlanır. Free Pascal, hedef platform için araçların dahili versiyonuna henüz sahip değilse, hedef platform için GNU derleyicisi ve bağlayıcısı gereklidir.

klan

Clang doğal olarak bir çapraz derleyicidir, derleme sırasında Clang'ın hangi mimarileri hedefleyebilmesini istediğinizi seçebilirsiniz.

Ayrıca bakınız

Referanslar

Dış bağlantılar