2014-06-22 37 views
11

komut "clang -v" baskılar: Bu "clang bir gcc installatiom seçer" ne anlama geliyorNeden clang gcc kurulumunu seçer?

$ clang -v 
clang version 3.4 (tags/RELEASE_34/final) 
Target: i386-redhat-linux-gnu 
Thread model: posix 
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2 
Found candidate GCC installation: /usr/lib/gcc/i686-redhat-linux/4.8.2 
Selected GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2 

? Niye ya? Clang gcc'den bağımsız mı değil mi?
Yardımlarınız için teşekkür ederiz.

DÜZENLEME: Bu ana bilgisayar için diğer varsayılan derleyici olup olmadığını sayfasına bir olasılıkla genel bir cevap (Fedora 20 kullanın) bulundu

https://bbs.archlinux.org/viewtopic.php?id=129760

+6

Clang libgcc ve crt nesne dosyaları bağlıdır.Elbette bağımsız olarak kurulabilir ve kurulabilirler, ancak bunu yapmanın kanonik bir yolu yoktur. –

cevap

3

Clang konak derleyici birkaç ayarlarını kullanır (çınlama varsayılan Apple'ın OSX/macOS ve variants of FreeBSD için). Diğer ikili dosyalar ve OS kütüphaneleri ile daha fazla uyumluluk kazanmak için yararlıdır.

Genellikle C++ programlar/kütüphanelerde ABI uyumluluğu için crt dosya ve derleyici iç başlıkları ve C++ kütüphane için (bağlayıcı ve Çevirici için) konak binutils, ev sahibi derleyici kullanır.

Takım zinciri seçimi, https://github.com/llvm-mirror/clang/blob/master/lib/Driver/ToolChains.cpp dosyasında uygulanan clang sürücüsünün (clang komutu) bir parçasıdır.

clang yönettiği "Sürücü Tasarım & Internals" bazı belgeler http://clang.llvm.org/docs/DriverInternals.html

toolchain

gcc sürücü aracı zincirlerinin doğrudan anlayışa sahip bulunmaktadır. Her bir gcc binary, kabaca tek bir ToolChain içine gömülmüş olan bilgiye karşılık gelir.

çınlama sürücü taşınabilir olması ve karmaşık bir derleme ortamları desteklemek için tasarlanmıştır. Tüm platform ve araç zincirine özgü kodlar, soyut veya iyi tanımlanmış arayüzlerin (platformun bir sürücü sürücüsü olarak kullanılmasını destekleyip desteklemediği gibi) arkasında korunmalıdır.

Bind: Aracı & Dosya adı seçilmesi. Kavramsal olarak, sürücü, Eylem (ler) i Araçlar'a atamak için bir üst aşağı eşleme gerçekleştirir. ToolChain, belirli bir eylemi gerçekleştirmek için aracın seçilmesinden sorumludur; bir kez seçildiğinde sürücü, ek eylemlerle eşleşip eşleşmeyeceğini görmek için araçla etkileşir (örneğin, tümleşik bir önişlemciye sahip olarak).

sürücü Aracı bağlamaları gerçekleştirmek için bir araç zinciri ile etkileşime girer. Her bir ToolChain, belirli bir mimari, platform ve işletim sistemi için derleme için gerekli tüm araçlar hakkında bilgi içerir. Tek bir sürücü çağrısı, ayrı mimariler için araçlar ile etkileşimde bulunmak için tek bir derleme sırasında birden fazla ToolChains sorgulayabilir. Bu aşamanın

sonuç doğrudan bilgisayarlı değildir, ancak sürücü -ccc-print-bağlamaları seçeneği aracılığıyla sonuçlarını yazdırabilirsiniz. Örneğin:

$ clang -ccc-print-bindings -arch i386 -arch ppc t0.c 
# "i386-apple-darwin9" - "clang", inputs: ["t0.c"], output: "/tmp/cc-Sn4RKF.s" 
# "i386-apple-darwin9" - "darwin::Assemble", inputs: ["/tmp/cc-Sn4RKF.s"], output: "/tmp/cc-gvSnbS.o" 
# "i386-apple-darwin9" - "darwin::Link", inputs: ["/tmp/cc-gvSnbS.o"], output: "/tmp/cc-jgHQxi.out" 
# "ppc-apple-darwin9" - "gcc::Compile", inputs: ["t0.c"], output: "/tmp/cc-Q0bTox.s" 
# "ppc-apple-darwin9" - "gcc::Assemble", inputs: ["/tmp/cc-Q0bTox.s"], output: "/tmp/cc-WCdicw.o" 
# "ppc-apple-darwin9" - "gcc::Link", inputs: ["/tmp/cc-WCdicw.o"], output: "/tmp/cc-HHBEBh.out" 
# "i386-apple-darwin9" - "darwin::Lipo", inputs: ["/tmp/cc-jgHQxi.out", "/tmp/cc-HHBEBh.out"], output: "a.out" 

Bu, derleme dizisi için bağlanmış olan araç zinciri, alet, girişleri ve çıkışları göstermektedir. Burada clang i386 mimarisinde t0.c derlemek için kullanılır ve aracın darwin özel sürümleri sonucu birleştirmek ve bağlamak için kullanılır, ancak araçların jenerik gcc sürümleri PowerPC'de kullanılır.

İlgili konular