Çapraz derleme için bir GCC 4.7 aracı zinciri nasıl oluşturabilirim?


82

Bu soruyu Stack Overflow'ta zaten sormuştum , ancak birisinin ARM çapraz derlemesi için (x86 / x86-64 Linux sunucusu için) bir GCC 4.7 aracı zinciri kurmayı başarıp başarmadığını bilmek istiyorum. Kaynaktan GCC'nin oluşturulması ve 4.7 GCC sürümleri için mevcut olan en son çapraz derleyiciler için pek çok talimat var, en son sürüm değil.

Rasp Pi'yi derlemek iyi çalışıyor, ancak pratik amaçlar için biraz yavaş.

Derleme almak için istekliyim ve en son ve en iyi araçları kullanmak istiyorum.


Bu, benim de yapmam gerekenler boyunca görünüyor. Arch Linux çalıştıran bir ARM5 için geliştiriyoruz. Geliştirme Ubuntu Linux 10.04 LTS'de (bugün, belki de bunu yarın yükseltiyoruz, henüz bilmiyorum). Şu anda GCC 4.4 kullanıyoruz, ancak C ++ 11 dil özellikleri için GCC 4.8 değilse (eğer yönetebilirsek) GCC 4.7 (minimum) gerektirmiyorsa, yapmam gerekenler faydalı olacaktır. ARM için mevcut olan tüm takım zincirleri (5 veya başka herhangi bir şey) çaresizce tarihli görünüyor. Kaynaktan bir çapraz derleyici takım zinciri oluşturmak ve istediğimiz GCC'yi desteklemek mümkün müdür?
mwpowellhtx

İkinci adımda küçük bir sorunum var. Aslında ./configure yaptım ve komutları verdim. Her şey iyi çalışıyor. ama "install" seçeneğini belirttiğimde, şunu söyleyen bir hata mesajı aldım: install: missing file operand

Ayrıca bakınız: raspberrypi.stackexchange.com/q/14587/5538 Bunu bir dupe olarak kapattım, ancak burada bağlantıya değeceğini düşündüm, çünkü kabul edilen cevap burada bulunmayan önemli ayrıntılara gitti.
goldilocks

Yanıtlar:


60

Bu talimatları buldum Ahududu Pi'niz için bir çapraz derleyici nasıl oluşturulur ? crosstool-ngÇapraz derleyici A LOT yapısını yapılandırmayı basitleştiren bir araç (güzel bir küfürler tabanlı bir arayüze sahiptir) kullanarak GCC 4.7'yi desteklemektedir.

Bu adımları izledim ve başarılı bir şekilde 4.7 çapraz derleyici oluşturdum.

Önkoşullar: Aşağıdaki paketler gereklidir: bison , flex , gperf , gawk , libtool , automake , g ++ , devam etmeden önce bunların yüklendiğinden emin olun.

  1. İlk indirme crosstool-ngdan burada (ı sürüm 1.15.2 kullanılır).
  2. Dağıtımı paketinden çıkarın ve ./configure/ make/install
  3. cdİçinde ve içine yerleştirmek için dosya sisteminde bir yerde yeni bir dizin oluşturun .
  4. Run ct-ng menuconfig. Yapınızı yapılandırmak için güzel bir menü seti sunulacak.
  5. Gidin Yollar ve muhtelif seçenekler. DENEYSEL olarak işaretlenmiş özellikleri etkinleştirin .
  6. Uygun bir Önek dizini seçin . Bu, derleyicinizin ve kitaplıklarınızın yükleneceği dizindir (temelde her şey yolundadır, yalnızca dizinin boş olduğundan emin olun).

    • NOT: Seçilen klasöre yazma erişiminizin olması da önemlidir.
  7. Git Hedef seçenekleri menüsünden.

    • Hedef mimarisi: kol
    • Endianness: küçük endian
    • Bitness: 32 bit
  8. Ayrıca kayan nokta parametresini ayarlamak isteyebilirsiniz softfp (bkz bu daha fazla bilgi için), ancak hardfp Raspbian için daha uygundur.

  9. Git İşletim sistemi menüsü ve değiştirmek Hedef OS için linux .
  10. Git C derleyicisi menüsü ve gcc version 4.7.0 seçim (makale Linaro önerir, ama vanilya gcc ile çalışan başardı). Ayrıca derleyebilmek istediğiniz ek dilleri de seçin (C ++, Fortran, ...)
  11. Git C-kütüphanesi menü ve seçti. Varsayılan değer eglibc'dir, ancak bu benim için iyi sonuç vermedi, bu yüzden glibc (en yeni sürüm) kullandım.

    • NOT: inşa adımı 13. sırasında, kaynak depodan alınamadığı için, örneğin subversion kurulu değilse eglibc yapılamayabilir.
    • NOT: eglibc , geliştirme eksikliğinden dolayı artık 1.21.0 sürümünün bir parçası değildir . Bkz eglibc Yani uzun . Varsayılan olarak glibc kullanın . crosstool-ng
  12. Değişikliklerinizi kaydederken yapılandırma aracından çıkın.
  13. ct-ng buildAynı dizinde çalıştırın . Bir süre bekleyin (benim durumumda yaklaşık 45 dakika) ve çapraz derleyiciniz hazır olmalıdır.

Harika çalışıyor gibi görünüyor!


Vay, 45 dakika uzun bir süre. Sisteminiz ne kadar hızlı? Bekliyorum şimdi.
Jivings,

Eh, belki biraz daha azdı, ama önce ve sonra bintools ve gcc de tüm önkoşulları derlemesi gerekiyor, libc ve libstdc ++, bu yüzden 45 dakika bana mantıklı geliyor.

Bunların doğru şekilde nasıl kurulacağına ve elbette test edildikten sonra yolun güncellenmesine ilişkin detaylar ekleyebilir miyiz ?
Alex Chamberlain,

2
Ayrıca, RPI'nin desteklediği gibi hardfp kullanmamız gerektiğini düşünüyorum.
Alex Chamberlain,

Olabilir, ancak IIRC, Arch'ın GCC softfp ile yapılandırılmış. Bunu şimdi test etmek için zamanım yok, ancak cevap topluluğunu wiki yaptım, bu yüzden onu geliştirmek için çekinmeyin.

19

Derleme almak için istekliyim ve en son ve en iyi araçları kullanmak istiyorum.

Aslında, en yeni ve en iyi araçların kendiniz tarafından yapılması gerekmez. On Ahududu Pi Aracı GitHub Deposu bulacaksınız X86_64ve x686çapraz derleme yazılım için toolchain.

Çok x86-linux64-cross-arm-linux-hardfpdaha hızlı bir sisteme yol açacak olan Sert Kayan Nokta için derleneceği için alet zincirini kullanmanızı öneririm .

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

Not: Mevcut bir çekirdeği kullanıyorsanız, çekirdeğe uyan alet zincirini kullanmanız gerekecektir. HardFP uygulamaları SoftFP çekirdeğinde çalışmaz.


Alet zincirini kullanmak için depoya göz atın:

git clone https://github.com/raspberrypi/tools.git --depth 1

--depthParametresi, (biz bunu yapmayacağız beri) depo geçmişi de indirilebilir için beklemek zorunda değilsiniz anlamına gelecektir.

Sonra ikili dosyaları PATH değişkeninize ekleyin:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

Veya PATH'ı sürdürmek için:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

Takım zinciri ile derlemek için şimdi CROSS_COMPILEparametreyi ekleyebilirsiniz . Örneğin, çalıştırırken make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

Veya bunu kolaylaştırmak için değişkeni bashrctekrar kaydedebilirsiniz :

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

ve şimdi değişkeni derlerken kullanın:

make CROSS_COMPILE=${TARGET}

1
Bu gcc-4.5.1 gibi görünüyor.

@Tibor Bu kötü mü?
Jivings

@Jivings Tamamen soruya cevap vermiyor!
Alex Chamberlain

1
Düşüşleri onaylamıyorum. @AlexChamberlain Kendi takım zincirinizi inşa etmenin zaman alıcı davranışına değerli bir alternatif yöntem önerir.
Jivings

2
@Jivings: Bu çok yardımcı olur. Bu arada gcc4.7.1 (sahip olduğum en iyisi) ve kayan nokta hemen çalışıyor. Chris'in Tibor'un yayınladığı orijinal açıklamasını kullanarak kayan nokta çalışması yapamıyorum. Çok teşekkürler.

4

64 bitlik bir sistemde centos 6.3 üzerinde ct-ng kullanarak alet zinciri oluştururken, statik bağlantı platformda desteklenmediği için (görünüşte) statik bağlamanın desteklenmediği için libstdc ++ 'ı statik olarak bağlama seçeneğinin seçimini kaldırmaya zorlandığımı unutmayın.

Ayrıca, önceden oluşturulmuş takım zincirini git deposundan kullanmak harika olsa da, bu zincir Centos 6.3 üzerinde çalışmıyor gibi görünüyor - muhtemelen daha modern bir sistem veya başka bir şey için inşa edilmiş olduğundan. Gerçekten bunu denemeye çalışmadım.



3

RPI'niz için bir şeyler hazırlamak için hızlı bir ana bilgisayardan yararlanmak istiyorsanız, chroot ve QEMU aracılığıyla çapraz ortamda çalışmanızı öneririm. Bu arada, uğraşmadan çapraz bir derleyicinin yerini alır.

Sadece deboostrap / multistrap kullanarak bir Debian çapraz ortamı kurun

(QEMU / debootstrap yaklaşımı bölümüne bakınız) ve bitirdiniz.



2

Ubuntu 64 bit sürümünü ve Raspberry Pi SVN'deki araçları yüklediyseniz ve hatayı alıyorsanız:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

sadece koş:

sudo apt-get install ia32-libs

1

Carlson-Minot Inc., hem çıplak metal hem de GNU / Linux ARM hedefleri için önceden oluşturulmuş bir alet zinciri sunmaktadır. Bu araç zinciri, OS X üzerinde inşa etmek için düzeltmeler ve uyarlamaları olan Mentor Graphics Sourcery Lite araç zincirine dayanmaktadır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.