題:
如何建立用於交叉編譯的GCC 4.7工具鏈?
user13
2012-06-13 00:45:29 UTC
view on stackexchange narkive permalink

我已經在Stack Overflow上問了這個問題,但是我想知道是否有人設法為ARM交叉編譯(對於x86 / x86-64 Linux主機)構建了GCC 4.7工具鏈。 。有很多關於從源代碼構建GCC的說明,也有很多針對4.7之前的GCC版本的交叉編譯器,而不僅僅是最新的版本。出於實用目的。

我渴望進行編譯,並且希望使用最新,最好的工具。

這似乎也符合我的需要。我們正在為運行Arch Linux的ARM5開發。開發是在Ubuntu Linux 10.04 LTS上進行的(今天,也許我們明天升級它,我還不知道)。當前,我們正在運行GCC 4.4,但是對於C ++ 11語言功能,如果不需要GCC 4.7(最低要求)(如果不需要GCC 4.8(如果我們可以管理)的話),我需要做的事情將有所幫助。似乎所有可用於ARM的工具鏈(5個或其他任何工具)都已經過時了。是否可以從源代碼構建交叉編譯器工具鏈並支持我們想要的GCC?
我在第二步有一點問題。實際上,我已經完成了./configure和make命令。一切正常。但是當我提示“安裝”時,我收到一條錯誤消息:安裝:缺少文件操作數
另請參見:http://raspberrypi.stackexchange.com/q/14587/5538我以虛假的方式將其關閉,但我認為值得在此處鏈接,因為那裡被接受的答案涉及此處未包含的大量細節。
八 答案:
user13
2012-06-13 19:49:42 UTC
view on stackexchange narkive permalink

我發現了這些說明如何為Raspberry Pi構建交叉編譯器。這是使用 crosstool-ng 工具的一個很好的介紹,該工具簡化了配置交叉編譯器構建A LOT(它具有基於curses的界面)並且支持GCC 4.7。

我已經按照這些步驟操作,最終成功構建了4.7交叉編譯器。

先決條件:需要以下軟件包:野牛 flex gperf gawk libtool 自動製作 g ++ ,請確保已安裝這些文件,然後再繼續。

  1. 首先從此處下載 crosstool-ng a>(我使用的是1.15.2版)。
  2. 解壓縮發行版並執行 ./ configure / make / install
  3. 在文件系統中的某個位置創建一個新目錄,以將其內置並 cd 。
  4. 運行 ct-ng menuconfig 。您將看到一組不錯的菜單來配置構建。
  5. 進入路徑和其他選項。啟用嘗試標記為EXPERIMENTAL的功能。
  6. 選擇合適的前綴目錄。這是將在其中安裝編譯器和庫的目錄(基本上可以,只要確保該目錄為空即可。)。

    • 注意:擁有對所選文件夾的寫訪問權也很重要
  7. 轉到目標選項菜單。

    • 目標體系結構: arm
    • 字節序:小字節序
    • 位數: 32位
  8. 您可能還希望將浮點參數設置為 softfp (請參閱獲取更多信息),但是 hardfp 更適合Raspbian。

  9. 轉到操作系統菜單,然後將 Target OS 更改為 linux
  10. 轉到 C編譯器菜單,然後選擇gcc版本4.7.0(本文建議使用Linaro,但我設法使其與香草gcc一起使用)。還選擇了您希望能夠編譯的其他語言(C ++,Fortran,...)
  11. 轉到 C-library 菜單並選擇一種。默認值為 eglibc ,但該版本對我來說還不夠完善,因此我使用了 glibc (最新版本)。

    • 注意::在構建步驟13中。如果未安裝subversion,則 eglibc 可能無法構建,因為無法從存儲庫中檢索源代碼
    • 注意: eglibc 從1.21.0版本開始不再是 crosstool-ng 的一部分缺乏發展。請參見使用eglibc很久。默認使用 glibc
  12. 在保存更改的同時退出配置工具。
  13. 運行 ct-ng build 在同一目錄中。等待一會兒(在我的情況下大約是45分鐘),您的交叉編譯器應該已經準備好。
哇,45分鐘是很長的時間。您的系統有多快?我現在在等
好吧,也許它要少一些,但是它必須先編譯所有先決條件,然後再編譯bintools和gcc以及libc和libstdc ++,所以45分鐘對我來說聽起來很合理。
一旦經過測試,我們是否可以添加有關如何正確安裝這些文件並更新路徑的詳細信息?
另外,我認為我們應該使用hardfp,因為RPi支持它。
可能是,但IIRC,Arch的GCC已配置為softfp。我現在沒有時間進行測試,但是我已經製作了答案社區Wiki,請隨時進行改進。
作為參考,我在Ubuntu 12.04上進行了構建(Arch Linux上的gcc 4.8由於`check_fds.c:85:1:內部編譯器錯誤:分段錯誤”而無法構建工具鏈)。在i5-2320上,總構建時間(不包括200 MiB的tarball下載時間)為16分鐘。完成後用於構建目錄的總磁盤空間(不帶壓縮包):4.2 GiB。 ct-build的輸出:http://pastebin.com/LAfsVAzx。一切都在tmpfs中完成,已安裝的x-tools目錄為102 MB。
@Jivings使用-j標誌對其進行編譯,它將對構建過程進行校驗
為什麼要使用最新版本的glibc?使用與raspbian提供的版本相同的版本更好嗎?
前幾天我讀到p-ip是hardfp,而hard和soft不兼容(關於庫api或內核abi的東西),如果是這樣,則必須選擇hardfp。
Jivings
2012-07-18 15:37:38 UTC
view on stackexchange narkive permalink

我很想編譯,我想使用最新和最好的工具。

事實上,不需要構建最新和最好的工具一個人在 Raspberry Pi工具GitHub存儲庫上,您可以找到用於交叉編譯軟件的 X86_64 x686 工具鏈。

I建議使用 x86-linux64-cross-arm-linux-hardfp 工具鏈,因為它將針對Hard Floating Point進行編譯,這將導致系統更快。

  $ arm-bcm2708hardfp-linux-gnueabi-gcc --versionarm-bcm2708-linux-gnueabi-gcc-4.5.1(Broadcom-2708)4.5.1版權所有(C)2010 Free Software Foundation,Inc。 

注意::如果使用的是現有內核,則必須使用與內核匹配的工具鏈。 HardFP應用程序無法在SoftFP內核上運行。


要使用工具鏈,只需簽出存儲庫即可:

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

-depth 參數將意味著您不必等待存儲庫歷史記錄下載為好(因為我們不會使用它)。

然後將二進製文件添加到您的PATH變量中:

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

或保留PATH:

  echo“ export PATH =〜/ tools / arm -bcm2708 / x86-linux64-cross-arm-linux-hardfp / bin:$ PATH“ >>〜/ .bashrcsource〜/ .bashrc  

要使用工具鏈進行編譯,現在可以添加 CROSS_COMPILE 參數。例如,運行 make

  make CROSS_COMPILE = arm-bcm2708hardfp-linux-gnueabi-  

更加容易,您可以將變量再次保存到 bashrc

  echo“ export TARGET = arm-bcm2708hardfp-linux-gnueabi” >>〜/ .bashrcsource〜/ .. bashrc  

,現在在編譯時使用變量:

  make CROSS_COMPILE = $ {TARGET}  
這似乎是gcc-4.5.1。
@Tibor不好嗎?
@Jivings完全不回答問題!
如何安裝它們以便與-march一起使用?
我不同意不贊成票。 @AlexChamberlain它為構建自己的工具鏈的耗時行為提供了一種有價值的替代方法。
我沒有拒絕投票...這個問題專門說4.7!
@AlexChamberlain是的,很公平。對於您之前的問題;您不需要提供`-march`嗎?
@Jivings: *非常*很有幫助。同時,它是gcc4.7.1(我有史以來最好的),浮點立即可用。我無法使用克里斯(Tibor)發表的原始描述來使浮點數有效。非常感謝。
@tommiport:如果自交叉編譯時浮點不起作用,則可能是混合了“ hardfp”和“ softfp”。
與此同時4.8.3和工作就像一個魅力。只需下載`tools-master.zip`(288M)並僅解壓縮所需的目錄即可。
在過去一周中,我所做的事情與此非常相似。這可能不是gcc的正確版本,但這仍然非常有用。
-1
Shane McCarron
2012-10-23 21:19:59 UTC
view on stackexchange narkive permalink

請注意,在64位系統上使用centos 6.3上的ct-ng構建工具鏈時,由於平台(顯然)不支持靜態鏈接,我被迫取消選擇靜態鏈接libstdc ++的選項。

而且,雖然最好使用git存儲庫中的預構建工具鏈,但是該鏈似乎在Centos 6.3上不起作用-可能是因為它是為更現代的系統或其他東西而構建的。我並沒有真正嘗試過減少失敗。

sparkie
2013-06-10 09:06:59 UTC
view on stackexchange narkive permalink

如果您希望從快速主機中受益,為RPI編譯內容,我建議通過chroot和QEMU在跨環境中工作。

只需使用 deboostrap / multistrap

即可設置Debian跨環境(請參閱QEMU / debootstrap一章)方法),您就完成了。

Anton Matosov
2014-06-10 02:24:10 UTC
view on stackexchange narkive permalink

如果要從OS X進行交叉編譯:這是一篇很棒的文章(也是我發現的唯一在Web上工作的文章)。

最好的事情是作者提供了一個完整的預編譯工具鏈,因此您只需要下載,解壓縮和掛載dmg映像即可。就是這樣,您可以進行交叉編譯了。

Dean Matsen
2015-02-12 10:46:37 UTC
view on stackexchange narkive permalink

本指南可能會有所幫助。

它幫助我開始工作。我還添加了一些有關調整的評論。

BirdOfPrey
2013-06-10 04:18:31 UTC
view on stackexchange narkive permalink

如果您安裝了Ubuntu 64位版本以及Raspberry Pi SVN的工具,則會出現錯誤:

  -bash:/ home / I / toolchain / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian / bin / arm-linux-gnueabihf-c ++:沒有這樣的文件或目錄 

只需運行:

  sudo apt-get install ia32-libs  
Anton Matosov
2014-06-12 12:02:06 UTC
view on stackexchange narkive permalink

Carlson-Minot Inc.提供了針對裸機和GNU / Linux ARM目標的預構建工具鏈。該工具鏈基於Mentor Graphics Sourcery Lite工具鏈,包含在OS X上構建的修復程序和採用方法。請參見



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...