Làm cách nào để xây dựng chuỗi công cụ GCC 4.7 để biên dịch chéo?


82

Tôi đã hỏi câu hỏi này trên Stack Overflow, nhưng tôi muốn biết liệu có ai quản lý để xây dựng một chuỗi công cụ GCC 4.7 cho quá trình biên dịch chéo ARM (cho máy chủ Linux x86 / x86-64) không. Có nhiều hướng dẫn để xây dựng GCC từ nguồn và nhiều trình biên dịch chéo có sẵn cho các phiên bản GCC trước 4.7, không phải là phiên bản mới nhất.

Bản biên dịch trên Rasp Pi hoạt động tốt, nhưng nó hơi chậm so với mục đích thực tế.

Tôi mong muốn được biên dịch và tôi muốn sử dụng các công cụ mới nhất và tốt nhất.


Điều này dường như dọc theo những gì tôi cần phải làm là tốt. Chúng tôi đang phát triển cho ARM5 chạy Arch Linux. Phát triển trên Ubuntu Linux 10.04 LTS (hôm nay, có thể chúng tôi sẽ nâng cấp vào ngày mai, tôi chưa biết). Hiện tại chúng tôi đang chạy GCC 4.4, nhưng những điều tôi cần làm sẽ hữu ích nếu không yêu cầu GCC 4.7 (tối thiểu) nếu không phải GCC 4.8 (nếu chúng tôi có thể quản lý nó), cho các tính năng ngôn ngữ C ++ 11. Có vẻ như tất cả các chuỗi công cụ có sẵn cho ARM (5 hoặc bất cứ thứ gì khác) đều lỗi thời. Có thể xây dựng chuỗi công cụ biên dịch chéo từ nguồn và hỗ trợ GCC mà chúng tôi muốn không?
mwpowellhtx

Tôi có một vấn đề nhỏ trong bước thứ hai. thực tế, tôi đã thực hiện ./mình và thực hiện các lệnh. Mọi thứ đều hoạt động tốt. nhưng khi tôi đã tip "cài đặt", tôi nhận được một thông báo lỗi cho biết: install: thiếu tệp toán hạng

Xem thêm: raspberrypi.stackexchange.com/q/14587/5538 Tôi đã đóng nó dưới dạng dupe, nhưng tôi nghĩ rằng nó đáng để liên kết ở đây vì câu trả lời được chấp nhận có chi tiết đáng kể không bao gồm ở đây.
goldilocks

Câu trả lời:


60

Tôi đã tìm thấy các hướng dẫn này Cách xây dựng trình biên dịch chéo cho Raspberry Pi của bạn . Đây là một bước đi tuyệt vời thông qua việc sử dụng một crosstool-ngcông cụ giúp đơn giản hóa việc cấu hình một trình biên dịch chéo A RẤT (nó có giao diện dựa trên lời nguyền đẹp) và nó hỗ trợ GCC 4.7.

Tôi đã làm theo các bước này và kết thúc với việc xây dựng thành công trình biên dịch chéo 4.7.

Điều kiện tiên quyết: Các gói sau được yêu cầu: bison , flex , gperf , gawk , libtool , automake , g ++ , đảm bảo chúng được cài đặt trước khi tiếp tục.

  1. Tải xuống đầu tiên crosstool-ngtừ đây (Tôi đã sử dụng phiên bản 1.15.2).
  2. Giải nén phân phối và thực hiện ./configure/ make/install
  3. Tạo một thư mục mới ở đâu đó trong hệ thống tệp để tích hợp cdvào đó.
  4. Chạy đi ct-ng menuconfig. Bạn sẽ được cung cấp một bộ menu đẹp để cấu hình bản dựng của bạn.
  5. Đi vào Paths và các tùy chọn linh tinh. Kích hoạt tính năng Thử được đánh dấu là TRẢI NGHIỆM.
  6. Chọn một thư mục Tiền tố phù hợp . Đây là thư mục mà trình biên dịch và thư viện của bạn sẽ được cài đặt (mọi thứ đều ổn về cơ bản, chỉ cần đảm bảo rằng thư mục trống).

    • LƯU Ý: Điều quan trọng nữa là bạn có quyền ghi vào thư mục đã chọn
  7. Chuyển đến menu Tùy chọn mục tiêu .

    • Kiến trúc mục tiêu: cánh tay
    • Endianness: ít endian
    • Nhân chứng: 32-bit
  8. Bạn cũng có thể muốn đặt tham số dấu phẩy động thành softfp (xem phần này để biết thêm thông tin), nhưng hardfp phù hợp hơn với Raspbian.

  9. Chuyển đến menu Hệ điều hành và thay đổi Target OS thành linux .
  10. Chuyển đến trình biên dịch C và chọn gcc phiên bản 4.7.0 (bài viết khuyến nghị Linaro, nhưng tôi đã quản lý để nó hoạt động với vanilla gcc). Đồng thời chọn các ngôn ngữ bổ sung mà bạn muốn có thể biên dịch (C ++, Fortran, ...)
  11. Chuyển đến menu thư viện C và chọn một. Mặc định là eglibc nhưng cái đó không phù hợp với tôi, vì vậy tôi đã sử dụng glibc (phiên bản mới nhất).

    • LƯU Ý: trong quá trình xây dựng bước 13. eglibc có thể không xây dựng nếu lật đổ không được cài đặt, vì nguồn không thể được truy xuất từ ​​kho lưu trữ
    • LƯU Ý: eglibc không còn là một phần của phiên bản 1.21.0 do thiếu phát triển. Xem quá dài để eglibc . Sử dụng glibc như mặc định. crosstool-ng
  12. Thoát khỏi công cụ cấu hình trong khi lưu các thay đổi của bạn.
  13. Chạy ct-ng buildtrong cùng một thư mục. Đợi một lúc (khoảng 45 phút trong trường hợp của tôi) và trình biên dịch chéo của bạn sẽ sẵn sàng.

Có vẻ để làm việc tuyệt vời!


Wow, 45 phút là một thời gian dài. Hệ thống của bạn nhanh như thế nào? Tôi đang đợi bây giờ.
Jivings

Chà, có lẽ nó ít hơn một chút, nhưng nó phải biên dịch tất cả các điều kiện tiên quyết trước và sau bintools và gcc cũng libc và libstdc ++, vì vậy 45 phút nghe có vẻ hợp lý với tôi.

Chúng ta có thể thêm chi tiết về cách cài đặt chúng đúng cách và cập nhật đường dẫn, một khi đã được kiểm tra tất nhiên không?
Alex Chamberlain

2
Ngoài ra, tôi nghĩ rằng chúng ta nên sử dụng hardfp, vì RPi hỗ trợ nó.
Alex Chamberlain

Có thể, nhưng IIRC, GCC của Arch được cấu hình bằng softfp. Bây giờ tôi không có thời gian để kiểm tra điều này, nhưng tôi đã tạo ra câu trả lời cho cộng đồng wiki, vì vậy hãy thoải mái cải thiện nó.

19

Tôi mong muốn được biên dịch và tôi muốn sử dụng các công cụ mới nhất và tốt nhất.

Trên thực tế, các công cụ mới nhất và tốt nhất không cần phải tự xây dựng. Trên Raspberry Pi Tool GitHub Rep Kho, bạn sẽ tìm thấy X86_64và các bộ x686công cụ cho phần mềm biên dịch chéo.

Tôi khuyên bạn nên sử dụng x86-linux64-cross-arm-linux-hardfptoolchain, vì nó sẽ biên dịch cho Hard Floating Point, điều này sẽ dẫn đến một hệ thống nhanh hơn nhiều.

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

Lưu ý: Nếu bạn đang sử dụng kernel hiện có thì bạn sẽ phải sử dụng toolchain phù hợp với kernel. Các ứng dụng HardFP sẽ không hoạt động trên kernel SoftFP.


Để sử dụng toolchain, chỉ cần kiểm tra kho lưu trữ:

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

Các --depththam số này sẽ có nghĩa là bạn không cần phải chờ đợi đối với lịch sử kho được tải về cũng như (kể từ khi chúng tôi wont được sử dụng nó).

Sau đó thêm các nhị phân vào biến PATH của bạn:

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

Hoặc để duy trì PATH:

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

Để biên dịch với chuỗi công cụ, bây giờ bạn có thể thêm CROSS_COMPILEtham số. Ví dụ: khi chạy make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

Hoặc để làm điều này dễ dàng hơn, bạn có thể lưu biến bashrclại:

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

và bây giờ sử dụng biến khi biên dịch:

make CROSS_COMPILE=${TARGET}

1
Điều này dường như là gcc-4.5.1.

@Tibor Có tệ không?
Jivings

@Jivings Nó hoàn toàn không trả lời câu hỏi!
Alex Chamberlain

1
Tôi không chấp nhận các downvote. @AlexChamberlain Nó gợi ý một phương pháp thay thế có giá trị cho hành động tốn thời gian xây dựng chuỗi công cụ của riêng bạn.
Jivings

2
@Jivings: Điều này rất hữu ích. Trong khi đó, nó là gcc4.7.1 (tốt nhất tôi từng có) và dấu phẩy động hoạt động ngay lập tức. Tôi không thể thực hiện công việc điểm nổi bằng cách sử dụng mô tả ban đầu của Chris mà Tibor đã đăng. Cảm ơn nhiều.

4

Lưu ý rằng khi xây dựng chuỗi công cụ bằng cách sử dụng ct-ng trên centos 6.3 trên hệ thống 64 bit, tôi buộc phải bỏ chọn tùy chọn liên kết tĩnh libstdc ++ vì liên kết tĩnh không được hỗ trợ trên nền tảng (rõ ràng).

Ngoài ra, mặc dù sẽ rất tuyệt khi sử dụng chuỗi công cụ dựng sẵn từ kho git, chuỗi đó dường như không hoạt động trên Centos 6.3 - có lẽ vì nó được xây dựng cho một hệ thống hiện đại hơn hoặc một cái gì đó. Tôi đã không thực sự cố gắng để chạy nó xuống.



3

Nếu bạn muốn hưởng lợi từ một máy chủ lưu trữ nhanh để biên dịch mọi thứ cho RPI của mình, tôi khuyên bạn nên làm việc trong môi trường chéo thông qua chroot và QEMU. Điều này bằng cách thay thế một trình biên dịch chéo không có rắc rối.

Đơn giản chỉ cần thiết lập môi trường chéo Debian bằng deboostrap / multistrap

(xem chương tiếp cận QEMU / debootstrap) và bạn đã hoàn thành.



2

Nếu bạn đã cài đặt phiên bản Ubuntu 64 bit và các công cụ từ Raspberry Pi SVN và bạn sẽ gặp lỗi:

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

chỉ cần chạy:

sudo apt-get install ia32-libs

1

Carlson-Minot Inc. cung cấp một chuỗi công cụ dựng sẵn cho cả các mục tiêu ARM kim loại trần và GNU / Linux. Chuỗi công cụ này dựa trên chuỗi công cụ Mentor Graphics Sourcery Lite với các bản sửa lỗi và thông qua để xây dựng trên OS X. Xem

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.