Jak zbudować łańcuch narzędzi GCC 4.7 do kompilacji krzyżowej?


82

Zadałem już to pytanie na temat przepełnienia stosu, ale chciałbym wiedzieć, czy komuś udało się zbudować zestaw narzędzi GCC 4.7 do kompilacji krzyżowej ARM (dla hosta Linux x86 / x86-64). Istnieje wiele instrukcji budowania GCC ze źródła i wiele dostępnych kompilatorów krzyżowych dla wersji GCC wcześniejszych niż 4.7, ale nie najnowsza.

Kompilacja na Rasp Pi sama działa dobrze, ale jest trochę za wolna dla celów praktycznych.

Zależy mi na kompilacji i chciałbym korzystać z najnowszych i najlepszych narzędzi.


To wydaje się zgodne z tym, co muszę również zrobić. Pracujemy nad ARM5 z systemem Arch Linux. Prace nad wersją systemu Ubuntu Linux 10.04 LTS (dziś może aktualizujemy to jutro, jeszcze nie wiem). Obecnie korzystamy z GCC 4.4, ale rzeczy, które muszę zrobić, będą pomocne, jeśli nie będą wymagały GCC 4.7 (minimum), jeśli nie GCC 4.8 (jeśli damy radę), dla funkcji języka C ++ 11. Wygląda na to, że wszystkie łańcuchy narzędzi dostępne dla ARM (5 lub cokolwiek innego) są bezradne. Czy można zbudować łańcuch narzędzi kompilatora krzyżowego ze źródła i wesprzeć żądaną przez nas GCC?
mwpowellhtx

W drugim kroku mam mały problem. w rzeczywistości zrobiłem ./configure i wykonuję polecenia. Wszystko dziala. ale kiedy napisałem „zainstaluj”, pojawia się komunikat o błędzie: install: brak pliku operand

Zobacz także: raspberrypi.stackexchange.com/q/14587/5538 Zamknąłem to jako duplikat, ale pomyślałem, że warto tutaj linkować, ponieważ przyjęta tam odpowiedź jest bardzo szczegółowa, nie została tu uwzględniona.
złotowłosy

Odpowiedzi:


60

Znalazłem te instrukcje Jak zbudować kompilator krzyżowy dla twojego Raspberry Pi . Jest to świetne przejście przez użycie crosstool-ngnarzędzia, które upraszcza konfigurację kompilacji między kompilatorami DUŻO (ma ładny interfejs oparty na przekleństwach) i obsługuje GCC 4.7.

Wykonałem te kroki i zakończyłem się sukcesem kompilacji kompilatora krzyżowego 4.7.

Wymagania wstępne: Wymagane są następujące pakiety: bison , flex , gperf , gawk , libtool , automake , g ++ , upewnij się, że są zainstalowane przed kontynuowaniem.

  1. Najpierw pobierz crosstool-ngz tutaj (użyłem wersji 1.15.2).
  2. Rozpakuj dystrybucję i wykonaj ./configure/ make/install
  3. Utwórz nowy katalog gdzieś w systemie plików, aby go wbudować i cddo niego.
  4. Uruchom ct-ng menuconfig. Otrzymasz ładny zestaw menu do konfiguracji kompilacji.
  5. Przejdź do Ścieżki i różne opcje. Włącz Wypróbuj funkcje oznaczone jako EKSPERYMENTALNE.
  6. Wybierz odpowiedni katalog prefiksów . Jest to katalog, w którym kompilator i biblioteki zostaną zainstalowane (wszystko jest w porządku, po prostu upewnij się, że katalog jest pusty).

    • UWAGA: Ważne jest również, aby mieć dostęp do zapisu do wybranego folderu
  7. Przejdź do menu Opcje celu .

    • Architektura docelowa: uzbrojenie
    • Endianness: mały endian
    • Bitowość: 32-bit
  8. Możesz także ustawić parametr zmiennoprzecinkowy na softfp (zobacz to, aby uzyskać więcej informacji), ale hardfp jest bardziej odpowiedni dla Raspbian.

  9. Przejdź do menu System operacyjny i zmień Docelowy system operacyjny na Linux .
  10. Przejdź do menu kompilatora C i wybierz gcc w wersji 4.7.0 (artykuł zaleca Linaro, ale udało mi się uruchomić go z waniliowym gcc). Wybierz także dodatkowe języki, które chcesz skompilować (C ++, Fortran, ...)
  11. Przejdź do menu biblioteki C i wybierz jedno. Domyślnie jest to eglibc, ale ten nie zbudował się dla mnie dobrze, więc użyłem glibc (najnowsza wersja).

    • UWAGA: podczas kroku kompilacji 13. eglibc może się nie zbudować, jeśli subversion nie jest zainstalowane, ponieważ źródła nie można pobrać z repozytorium
    • UWAGA: eglibc nie jest już częścią wersji 1.21.0 z powodu braku rozwoju. Zobacz So long to eglibc . Użyj glibc jako domyślnego. crosstool-ng
  12. Wyjdź z narzędzia konfiguracyjnego podczas zapisywania zmian.
  13. Uruchom ct-ng buildw tym samym katalogu. Poczekaj chwilę (w moim przypadku około 45 minut), a Twój kompilator krzyżowy powinien być gotowy.

Wydaje się, że działa świetnie!


Wow, 45 minut to długi czas. Jak szybki jest twój system? Czekam teraz
Jivings

Cóż, może było trochę mniej, ale najpierw musi skompilować wszystkie wymagania wstępne, a po bintools i gcc także libc i libstdc ++, więc 45 minut brzmi dla mnie rozsądnie.

Czy moglibyśmy dodać szczegóły, jak prawidłowo je zainstalować i zaktualizować ścieżkę, oczywiście po przetestowaniu?
Alex Chamberlain

2
Myślę też, że powinniśmy używać hardfp, ponieważ RPi to obsługuje.
Alex Chamberlain

Może być, ale IIRC, GCC Archa jest skonfigurowane z softfp. Nie mam teraz czasu, aby to przetestować, ale stworzyłem wiki wiki społeczności, więc możesz ją poprawić.

19

Zależy mi na kompilacji i chciałbym korzystać z najnowszych i najlepszych narzędzi.

W rzeczywistości najnowsze i najlepsze narzędzia nie muszą być tworzone samodzielnie. W repozytorium GitHub Raspberry Pi Tool znajdziesz łańcuchy X86_64i x686narzędzia do oprogramowania do kompilacji krzyżowej.

Polecam korzystanie z x86-linux64-cross-arm-linux-hardfpzestawu narzędzi, ponieważ skompiluje się on dla Hard Floating Point, co spowoduje znacznie szybszy system.

$ 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.

Uwaga: Jeśli używasz istniejącego jądra, będziesz musiał użyć łańcucha narzędzi, który pasuje do jądra. Aplikacje HardFP nie będą działać na jądrze SoftFP.


Aby skorzystać z zestawu narzędzi, po prostu sprawdź repozytorium:

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

Ten --depthparametr oznacza, że ​​nie musisz również czekać na pobranie historii repozytorium (ponieważ nie będziemy jej używać).

Następnie dodaj pliki binarne do zmiennej PATH:

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

Lub, aby zachować ŚCIEŻKĘ:

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

Aby skompilować z łańcuchem narzędzi, możesz teraz dodać CROSS_COMPILEparametr. Na przykład podczas uruchamiania make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

Aby to ułatwić, możesz bashrcponownie zapisać zmienną w :

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

i teraz używaj zmiennej podczas kompilacji:

make CROSS_COMPILE=${TARGET}

1
To wydaje się być gcc-4.5.1.

@ Tibor Czy to źle?
Jivings

@ Jivings Całkowicie nie odpowiada na pytanie!
Alex Chamberlain,

1
Nie pochwalam głosów negatywnych. @AlexChamberlain Sugeruje cenną alternatywną metodę czasochłonnego budowania własnego zestawu narzędzi.
Jivings

2
@Jivings: Jest to bardzo pomocne. Tymczasem jest to gcc4.7.1 (najlepszy, jaki kiedykolwiek miałem), a zmiennoprzecinkowe działa od razu. Nie mogłem sprawić, by liczba zmiennoprzecinkowa działała na podstawie oryginalnego opisu Chrisa opublikowanego przez Tibora. Wielkie dzięki.

4

Zauważ, że budując zestaw narzędzi za pomocą ct-ng na centos 6.3 na 64-bitowym systemie, byłem zmuszony odznaczyć opcję statycznego linkowania libstdc ++, ponieważ statyczne linkowanie nie było obsługiwane na platformie (najwyraźniej).

Ponadto, chociaż dobrze byłoby użyć wstępnie zbudowanego łańcucha narzędzi z repozytorium git, łańcuch ten nie działa na Centos 6.3 - prawdopodobnie dlatego, że został zbudowany dla bardziej nowoczesnego systemu lub czegoś takiego. Tak naprawdę nie próbowałem tego zaniedbać.



3

Jeśli chcesz skorzystać z szybkiego hosta do kompilacji rzeczy dla twojego RPI, sugeruję pracę w różnych środowiskach poprzez chroot i QEMU. Nawiasem mówiąc, to zastępuje cross kompilator bez żadnych problemów.

Po prostu skonfiguruj różne środowisko Debiana za pomocą deboostrap / multistrap

(patrz rozdział QEMU / podejście debootstrap) i gotowe.



2

Jeśli zainstalowałeś wersję 64-bitową Ubuntu i narzędzia z Raspberry Pi SVN, a pojawia się błąd:

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

po prostu biegnij:

sudo apt-get install ia32-libs

1

Carlson-Minot Inc. zapewnia wstępnie przygotowany łańcuch narzędzi zarówno dla celów ARM typu bare-metal, jak i GNU / Linux. Ten zestaw narzędzi jest oparty na zestawie narzędzi Mentor Graphics Sourcery Lite z poprawkami i adaptacjami do kompilacji w systemie OS X. Zobacz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.