導航:首頁 > 操作系統 > linux編譯工具鏈

linux編譯工具鏈

發布時間:2023-06-01 01:32:06

⑴ 嵌入式linux中,製作交叉編譯工具鏈的問題

ln: creating hard link `libintl.h' to `/mnt/hgfs/share/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/binutils-2.15/intl/libgettext.h': Operation not permitted

創建硬鏈接失敗,可能是操作許可權的問題,或者你要創建連接的位置的文件系統與目標文件系統不同。
這只是這里的錯誤,但一般這種錯誤都是由前面的configure或make的參數設置不正確導致的。

⑵ 在linux系統下怎麼用編譯工具鏈編譯源代碼

一般是用的GNU的那一套工具鏈

比如你寫了一個源碼為main.c

然後gcc main.c即可,生成的a,out為可執行的ELF文件。

如果你需要了解GCC的詳解資料,最好讀一下它的man pages

⑶ linux系統內核編譯出錯arm需要arm.h

交叉編譯工具鏈的問題。在編譯ARM架構的Linux內核時出現錯誤提示激賣缺少arm.h文件件,是由於交叉編譯工具鏈的問題。解決該問題需簡豎要安裝針對ARM架構的交叉編譯工具鏈,並設攔鉛大置環境變數。Linux系統是一種自由、開放源代碼的計算機操作系統。它是一種多用戶、多任務、支持多線程和多CPU的操作系統。

⑷ LINUX交叉編譯工具鏈和GCC是什麼關系啊

編譯工具鏈一般最簡化的為binutils+gcc+glibc+kernel-header組合的環境。
GCC就是編譯器,他的輸出每次安裝只能有針對一個架構的指令輸出。如果要多個架構輸出,那就要裝多個GCC,所以編譯工具鏈裡面會有一個GCC。
交叉編譯就是跨架構編譯,編譯出來的程序不能在本機執行(當然有例外情況)。所以這個時候就需要交叉編譯工具鏈。
工具鏈光有GCC是不行的,還需要一個binutils的二進制連接器,以及一個最基本的目標架構的C庫,C庫還需要一個目標架構的內核源代碼才能完全工作(當然不是必須的,但編譯有的時候需要)
又因為GCC、binutils不能實現單軟體同時多架構輸出,所以需要單獨另裝,又加上C庫和內核頭文件需要目標架構的東西而不能用本機本地架構的數據。
所以一個交叉編譯工具鏈就是針對目標架構准備的單獨安裝單獨使用的binutils+gcc+glibc+kernel-header的集合了。
PS:這個kernel-header並不一定就是Linux,他還可以是別的系統核心開發庫,比如FreeBSD。

⑸ Linux嵌入式交叉編譯工具鏈問題 淺談

簡介

交叉編譯工具鏈是一個由編譯器、連接器和解釋器組成的綜合開發環境,交叉編譯工具鏈主要由binutils、gcc和glibc 3個部分組成。有時出於減小libc庫大小的考慮,也可以用別的c庫來代替glibc,例如uClibc、dietlibc和newlib。交叉編譯工具鏈主要包括針對目標系統的編譯器gcc、目標系統的二進制工具binutils、目標系統的標准c庫glibc和目標系統的Linux內核頭文件。第一個步驟就是確定目標平台。每個目標平台都有一個明確的格式,這些信息用於在構建過程中識別要使用的不同工具的正確版本。因此,當在一個特定目標機下運行GCC時,GCC便在目錄路徑中查找包含該目標規范的應用程序路徑。GNU的目標規范格式為CPU-PLATFORM-OS。例如,建立基於ARM平台的交叉工具鏈,目標平台名為arm-linux-gnu。

交叉編譯工具鏈的製作方法

  1. 分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。

  2. 通過Crosstool腳本工具來實現一次編譯生成交叉編譯工具鏈。

  3. 直接通過網上(ftp.arm.kernel.org.uk)下載已經製作好的交叉編譯工具鏈。

方法1相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用方法2或方法3構建交叉工具鏈。方法3的優點不用多說,當然是簡單省事,但與此同時該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的沒有靈活性,所以構建所用的庫以及編譯器的版本也許並不適合你要編譯的程序,同時也許會在使用時出現許多莫名的錯誤,建議你慎用此方法。


方法1:分步構建交叉編譯工具鏈


  1. 下載所需的源代碼包

  2. 建立工作目錄

  3. 建立環境變數

  4. 編譯、安裝Binutils

  5. 獲取內核頭文件

  6. 編譯gcc的輔助編譯器

  7. 編譯生成glibc庫

  8. 編譯生成完整的gcc

由於在問答中的篇幅,我不能細述具體的步驟,興趣的同學請自行閱讀開源共創協議的《Linux from scratch》,網址是:linuxfromscratch dot org


方法2:用Crosstool工具構建交叉工具鏈(推薦)

Crosstool是一組腳本工具集,可構建和測試不同版本的gcc和glibc,用於那些支持glibc的體系結構。它也是一個開源項目,下載地址是kegel dot com/crosstool。用Crosstool構建交叉工具鏈要比上述的分步編譯容易得多,並且也方便許多,對於僅僅為了工作需要構建交叉編譯工具鏈的你,建議使用此方法。

運行which makeinfo,如果不能找見該命令,在解壓texinfo-4.11.tar.bz2,進入texinfo-4.11目錄,執行./configure&&make&&make install完成makeinfo工具的安裝

下載所需資源文件linux-2.4.20.tar.gz、binutils-2.19.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和gdb-6.5.tar.bz2。然後將這些工具包文件放在新建的$HOME/downloads目錄下,最後在$HOME/目錄下解壓crosstool-0.43.tar.gz,命

令如下:
#cd$HOME/
#tar–xvzfcrosstool-0.43.tar.gz

接著需要建立自己的編譯腳本,起名為arm.sh,為了簡化編寫arm.sh,尋找一個最接近的腳本文件demo-arm.sh作為模板,然後將該腳本的內容復制到arm.sh,修改arm.sh腳本,具體操作如下:

# cd crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改後的arm.sh腳本內容如下:

#!/bin/sh
set-ex
TARBALLS_DIR=$HOME/downloads#定義工具鏈源碼所存放位置。
RESULT_TOP=$HOME/arm-bin#定義工具鏈的安裝目錄
exportTARBALLS_DIRRESULT_TOP
GCC_LANGUAGES="c,c++"#定義支持C,C++語言
exportGCC_LANGUAGES
#創建/opt/crosstool目錄
mkdir-p$RESULT_TOP
#編譯工具鏈,該過程需要數小時完成。
eval'catarm.datgcc-3.3.6-glibc-2.3.2.dat'shall.sh--notest
echoDone.

在arm.sh腳本文件中需要注意arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat兩個文件,這兩個文件是作為Crosstool的編譯的配置文件。其中arm.dat文件內容如下,主要用於定義配置文件、定義生成編譯工具鏈的名稱以及定義編譯選項等。

KERNELCONFIG='pwd'/arm.config#內核的配置
TARGET=arm-linux#編譯生成的工具鏈名稱
TARGET_CFLAGS="-O"#編譯選項


gcc-3.3.6-glibc-2.3.2.dat文件內容如下,該文件主要定義編譯過程中所需要的庫以及它定義的版本,如果在編譯過程中發現有些庫不存在時,Crosstool會自動在相關網站上下載,該工具在這點上相對比較智能,也非常有用。

BINUTILS_DIR=binutils-2.19
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根據實際情況填寫)
GDB_DIR=gdb-6.5

將Crosstool的腳本文件和配置文件准備好之後,開始執行arm.sh腳本來編譯交叉編譯工具。具體執行命令如下:

#cdcrosstool-0.43
#./arm.sh

經過數小時的漫長編譯之後,會在/opt/crosstool目錄下生成新的交叉編譯工具,其中包括以下內容:

arm-linux-addr2linearm-linux-g++arm-linux-ldarm-linux-size
arm-linux-ararm-linux-gccarm-linux-nmarm-linux-strings
arm-linux-asarm-linux-gcc-3.3.6arm-linux-objarm-linux-strip
arm-linux-c++arm-linux-gccbugarm-linux-objmpfix-embedded-paths
arm-linux-c++filtarm-linux-gcovarm-linux-ranlib
arm-linux-cpparm-linux-gprofarm-linux-readelf

然後將生成的編譯工具鏈路徑添加到環境變數PATH上去,添加的方法是在系統/etc/ bashrc文件的最後添加下面一行,在bashrc文件中添加環境變數

export PATH=/home/jiabing/gcc-3.3.6-glibc-2.3.2/arm-linux-bin/bin:$PATH

至此,arm-linux下的交叉編譯工具鏈已經完成,現在就可以使用arm-linux-gcc來生成試驗箱上的程序了!












⑹ 什麼是嵌入式linux交叉工具鏈

在編譯軟體的時候,會用到(鏈接)一些平台相關的類庫,如果是在本地運行的話,一般不用作特殊處理,但由於嵌入式軟體的運行平台不是本地,所以要做一些特殊處理,讓編譯環境信賴的類庫脫離本地信賴,使用嵌入式平台的類庫來進行鏈接,處理這一過程就叫作交叉編譯工具鏈。
不只是嵌入式要用到交叉編譯工具,跨平台編譯也要使用交叉編譯工具鏈,如linux編譯win32軟體,linu 32位系統編譯linux64位軟體等等。它們的部署原理都是一樣的。

⑺ 關於Linux上的arm-linux交叉編譯工具鏈的問題:但是arm也有很多種啊! 這個工具是對所有的ARM都支持嗎

由於交叉編譯器中每個組件都有各自的版本,所以可以使用不同版本的組件來製作交叉編譯器。但是,組件之間會因版本不匹配的問題而產生錯誤。為了避免這種麻煩,建議直接使用製作好的arm-linux交叉編譯器。你優化arm9,應該是想升級內核吧,升級內核有相應的命令的。

⑻ 關於Linux

Linux 正在嵌入式開發領域穩步發展。因為 Linux 使用 GPL(請參閱本文後面的參考資料),所以任何對將 Linux 定製於 PDA、掌上機或者可佩帶設備感興趣的人都可以從網際網路免費下載其內核和應用程序,並開始移植或開發。許多 Linux 改良品種迎合了嵌入式/實時市場。它們包括 RTLinux(實時 Linux)、uclinux(用於非 MMU 設備的 Linux)、Montavista Linux(用於 ARM、MIPS、PPC 的 Linux 分發版)、ARM-Linux(ARM 上的 Linux)和其它 Linux 系統

嵌入式 Linux 開發大致涉及三個層次:引導裝載程序、Linux 內核和圖形用戶界面(或稱 GUI)。引導裝載程序通常是在任何硬體上執行的第一段代碼。在象台式機這樣的常規系統中,通常將引導裝載程序裝入主引導記錄(Master Boot Record,(MBR))中,或者裝入 Linux 駐留的磁碟的第一個扇區中。通常,在台式機或其它系統上,BIOS 將控制移交給引導裝載程序。

專用軟體可以直接與遠程系統上的快閃記憶體設備進行交互並將引導裝載程序安裝在快閃記憶體的給定位置中。快閃記憶體設備是與存儲設備功能類似的特殊晶元,而且它們能持久存儲信息 — 即,在重新引導時不會擦除其內容。

某些種類的嵌絕清入式設備具有微小的引導代碼— 根據幾個位元組的指令 — 它將初始化一些 DRAM 設置並啟用目標上的一個串列(或者 USB,或者乙太網)埠與主機程序通信。然後,主機程序或裝入程序可以使用這個連接將引導裝載程序傳送到目標上,並將它寫入快閃記憶體。設置工具鏈在主機機器上創建一個用於編譯將在目標上運行的內核和應用程序的構建環境 — 這是因為目標硬體可能沒有與主機兼容的二進制執行級別。

工具鏈由一套用於編譯、匯編和鏈接態嘩內核及應用程序的組件組成。 這些組件包括:Binutils— 用於操作二進制文件的實用程序集合帆宏行。它們包括諸如ar、as、objmp、obj這樣的實用程序。G— GNU C 編譯器。Glibc— 所有用戶應用程序都將鏈接到的 C 庫。避免使用任何 C 庫函數的內核和其它應用程序可以在沒有該庫的情況下進行編譯。構建工具鏈建立了一個交叉編譯器環境。本地編譯器編譯與本機同類的處理器的指令。交叉編譯器運行在某一種處理器上,卻可以編譯另一種處理器的指令。重頭設置交叉編譯器工具鏈可不是一項簡單的任務:它包括下載源代碼、修補補丁、配置、編譯、設置頭文件、安裝以及很多很多的操作。另外,這樣一個徹底的構建過程對內存和硬碟的需求是巨大的。如果沒有足夠的內存和硬碟空間,那麼在構建階段由於相關性、配置或頭文件設置等問題會突然冒出許多問題。

因此能夠從網際網路上獲得已預編譯的二進制文件是一件好事(但不太好的一點是,它們大多數只限於基於 ARM 的系統,但遲早會改變的)。一些比較流行的已預編譯的工具鏈包括那些來自 Compaq(Familiar Linux )、LART(LART Linux)和 Embedian(基於 Debian 但與它無關)的工具鏈 — 所有這些工具鏈都用於基於 ARM 的平台。從用戶的觀點來看,圖形用戶界面(GUI)是系統的一個最至關重要的方面:用戶通過 GUI 與系統進行交互。所以 GUI 應該易於使用並且非常可靠。但它還需要是有內存意識的,以便在內存受限的、微型嵌入式設備上可以無縫執行。所以,它應該是輕量級的,並且能夠快速裝入。

另一個要考慮的重要方面涉及許可證問題。一些 GUI 分發版具有允許免費使用的許可證,甚至在一些商業產品中也是如此。另一些許可證要求如果想將 GUI 合並入項目中則要支付版稅。

最後,大多數開發人員可能會選擇 XFree86,因為 XFree86 為他們提供了一個能使用他們喜歡的工具的熟悉環境。但是市場上較新的 GUI,象 Century Software 的 (Nano-X)和 Trolltech QT/Embedded,與 X 在嵌入式 Linux 的競技舞台中展開了激烈競爭,這主要是因為它們佔用很少的資源、執行的速度很快並且具有定製窗口構件的支持。

⑼ Linux工具鏈是什麼

一般linux工具鏈的是指的是GNU 開發工具鏈

是指 GNU Compiler Collection(gcc)GNU libc (glibc)以及用來編譯、測試和分析軟體的 GNU binutils (binutils)。

他是自依賴的, 也就是說 他構成了一個編譯,測試,安裝的完整體,使用這個工具鏈可以很容易從0開始創建一個GNU/Linux系統

⑽ LINUX交叉編譯工具鏈和GCC是什麼關系啊

編譯工具鏈一般最簡化的為
binutils
+
gcc
+
glibc
+
kernel-header
組合的環境。
GCC
就是編譯器,他的輸出每次安裝只能有針對一個架構的指令輸出。如果要多個架構輸出,那就要裝多個
GCC
,所以編梁吵納譯工具鏈裡面會有一個
GCC

交叉編譯就是跨架構編譯,編譯出來的程序不能在本機執行(當然有例外情況)。所以這個時候就需要交叉編譯工具鏈。
工具鏈光有
GCC
是不行的,還需要一個
binutils
的二進制連接器,以及一個最基本的目標架構的
C
庫,C
庫還需要一個目標架構的內核源代碼才能完全工作(當然不是必須的,但編譯有的時候需要)
又因為
GCC
、binutils
不能實現單軟體同碰正時多架構輸出,所以需要單獨另裝,又加上
C
庫和內核頭文件需要目標架構的東西而不能用本機本地架構的數據。
所以一個交叉編譯工具鏈就是針對目標架構准備的單獨安裝單獨使用的
binutils
+
gcc
+
glibc
+
kernel-header
的集合了。
PS:這個
kernel-header
並不一定就是
Linux
,他還可以是別的系統橡沒核心開發庫,比如
FreeBSD

閱讀全文

與linux編譯工具鏈相關的資料

熱點內容
加密思維幣 瀏覽:688
魅族訪客文件夾 瀏覽:50
添加的文件夾怎麼找 瀏覽:615
程序員涉黃 瀏覽:698
maven編譯resources下的js 瀏覽:519
ubuntu文件移動命令 瀏覽:227
安卓i怎麼查找蘋果手機 瀏覽:949
雲伺服器宕機概率 瀏覽:229
在線買葯用什麼app知乎 瀏覽:813
ubuntu解壓xz文件 瀏覽:674
宏傑加密時電腦關機 瀏覽:388
自己寫單片機編譯器 瀏覽:598
單片機按鍵閃爍 瀏覽:380
為什麼icloud總是顯連接伺服器失敗 瀏覽:888
如何設置域控伺服器 瀏覽:739
想在上海租房子什麼app好 瀏覽:186
編譯程序各部分是必不可少的嗎 瀏覽:887
編程不超過十行 瀏覽:765
數電編譯器的作用 瀏覽:339
時間演算法與現在有什麼區別 瀏覽:164