ne windows görsel C ++ derleyici bir linux ikili yürütülebilir dosya oluşturmak için zorlaştırır?
Microsoft'un bunu yapmaya isteksizliği dışında kesinlikle hiçbir şey. Engeller teknik değil.
Geliştirme araç zincirleri sadece girdi alan ve çıktı üreten programlardır. Visual C ++, x86 derleme üretir ve sonra bir COFF nesne dosyasına dönüştürmek için bir derleyici kullanır. Microsoft bunun yerine ELF üretmesini istiyorsa, sadece kod: montaj gelir, ELF söner. Nesne dosyaları veya kütüphanelerde sihir yoktur; bunlar sadece iyi anlaşılmış bir formatta veri yığınlarıdır.
Taş devrinde, çapraz derleme çok daha zordu çünkü daha sık olmamasından, çalışacağı platform için montajda hedef platformunuz için takım zincirini yazardınız. Bu, eğer dünyadaki her şey VAX, M68K ve Alpha mimarileri olsaydı, tam bir çapraz derleyici paketinin dokuz tanesini, çoğunlukla sıfırdan yazmayı gerektireceği anlamına geliyordu. (VAX-VAX, VAX-M68K, VAX-Alfa, M68K-VAX, M68K-M68K, vb.) VAX derleyicisinin bazı bölümleri yeniden kullanılabileceğinden ve her bir hedef için kod oluşturuculara eklenir (ör. VAX, M68K ve Alpha, her biri VAX için yazılmıştır.)
Belirli bir işlemciye bağlı olmayan bir dilde derleyiciler yazmaya başladığımızda bu sorun ortadan kalktı, böyle bir C. Bu rotaya gitmek, tüm araç zincirini C'ye bir kez yazmanız ve yerel bir platform için yazdığınız anlamına gelir C derleyicisi oluşturmak için. (Derleyiciyi genellikle yerel platformun derleyicisine önyüklendikten sonra yeniden derlemek için kullanırsınız, ancak bu başka bir tartışmadır.) Bunun sonucu, çapraz derleyici oluşturmanın, yerel platform. Tek önemli fark, oluşturma sürecinde bir yerde, mantıksal seçim olan yerel platform için olan yerine, platformunuz için kod oluşturucuda derlemesini söylemiş olmanızdır.
Derleyicilerin mimarisi geliştikçe, tüm kod üreticilerini ürüne dahil etmek ve oluşturmak ve çalışma zamanında hangisinin kullanılacağını seçmek uygun hale geldi. Clang / LLVM bunu yapıyor ve eminim başkaları da var.
Çalışan bir araç zincirine (derleyici, montajcı, bağlayıcı) sahip olduğunuzda, kütüphaneler kaynaklardan oluşturulur ve sonunda başka bir platform için yürütülebilir bir dosya oluşturmak için ihtiyacınız olan her şeyle sonuçlanırsınız.