導航:首頁 > 源碼編譯 > 編譯器工具鏈關系

編譯器工具鏈關系

發布時間:2024-03-12 20:31:52

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

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

㈡ 交叉編譯工具鏈 arm-arago-linux-gnueabi-gcc 中的arago和gnueabi代表什麼意思

arm-arago-linux-gnueabi-gcc
arm :CPU Architecture
arago: Hardware Platform or Vendor
linux:Operating System
gnueabi: C Library

arago 那個段落,表示的是供應商,對於 arm 這里也可以是 hardfloat 或者 softfloat ,也就是使用的是硬浮點還是軟浮點。當然其實這個東西是在編譯 gcc 時,通過 --with-float= 指定而不是通過這里進行識別蘆州。但有的時候,一些編譯腳本會識別這里來確定浮點運算器是軟是硬。

gnueabi 是 C 函數庫的使用,比如 gnu 是 GNU C Library ,也就是 glibc 。對應的還有 uclibc 。附加的 eabi 其實是說,使用的是新的 EABI 二進制介面 Embedded application binary interface 。這個嵌入式專用介面比老的更好用,效率更高而且支持新的一些硬體功能。碼伍老的教 OABI 。當然,同 float 一樣可以通過參數直接定義。

這一大堆聯合起來,只是為了直觀的表現並且區別使用用途和功能定義。沒有必陪模蔽要太過於關注。

㈢ c語言編譯程序屬於應用軟體,系統軟體還是工具軟體

c語言編譯程序屬於系統軟體。

編譯程序(Compiler,compiling program)也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。這里的編譯程序是一種動作,是根據編譯原理技術,由高級程序設計語言編譯器翻譯成機器語言二進制代碼行為。因此它是系統軟體。

計算機軟體總體分為系統軟體和應用軟體兩大類:系統軟體是各類操作系統,如windows、Linux、UNIX等,還包括操作系統的補丁程序及硬體驅動程序,都是系統軟體類。

應用軟體可以細分的種類就更多了,如工具軟體、游戲軟體、管理軟體等都屬於應用軟體類。電腦工具軟體就是指在使用電腦進行工作和學習時經常使用的軟體。

(3)編譯器工具鏈關系擴展閱讀:

不同點

1、表現形式不同

硬體有形,有色,有味,看得見,摸得著,聞得到。而軟體無形,無色,無味,看不見,摸不著,聞不到。軟體大多存在人們的腦袋裡或紙面上,它的正確與否,是好是壞,一直要到程序在機器上運行才能知道。這就給設計、生產和管理帶來許多困難。

2、生產方式不同

軟體是開發,它是人的智力的高度發揮,不是傳統意義上的硬體製造。盡管軟體開發與硬體製造之間有許多共同點,但這兩種活動是根本不同的。

3、要求不同

硬體產品允許有誤差,而軟體產品卻不允許有誤差。

4、維護不同

硬體是要用舊用壞的,在理論上,軟體是不會用舊用壞的,但在實際上,軟體也會變舊變壞。因為在軟體的整個生存期中,一直處於改變(維護)狀態。

網路-計算機軟體

㈣ 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交叉編譯工具鏈和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

㈥ 關於交叉編譯工具鏈的問題

核心轉儲是崩潰報告的一個過程,他只是把當前崩潰的信息轉存出來方便差錯。而且這個核心轉儲幾個字也不過是個提示輸出信息。這個提示不會給與任何與錯誤相關的內容,必須看其他的錯誤信息或者他轉儲出來的東西來分析。
不過核心轉儲,應該是程序運行出錯而崩潰。這種問題出現在你正在運行的程序,而不是編譯過程出現的編譯錯誤(也就是說,出現核心轉儲應該就是 GCC 或者他調用的程序自己崩潰了)。出現這個問題的原因很多。

如果是因為沒有找到某些 header 文件,不應該是核心轉儲錯誤,而是編譯器或者某個過程提示錯誤信息後退出,他會輸出錯誤信息告訴你問題所在。

至於你編譯的這些東西版本都比較老,我建議還是嘗試降級整個系統來編譯、運行你現在的這些東西。或者升級你這個交叉編譯工具鏈到當前主流的版本來用。

至於交叉工具連當中的 GCC 和你當前本機的 GCC,完全是兩個互相獨立的 GCC 。
只是他們編譯輸出的二進製程序針對的指令集不同而已。相對的 binutils 和 glibc 和 kernel-header 都是一樣的意思,針對目標而輸出的相關程序。當然 glibc 和 kernel-header 主要是以「數據」方式存在,gcc 和 binutils 主要是以可以運行的程序方式存在(當然不是絕對的,比如 gcc 還會提供幾個 lib 相關的內容,不過大部分情況下你可以這么理解更直觀了解他們的作用)。
一般說來 GCC 是編譯器,binutils 是連接器,glibc 是標准 C 庫(主要是連接時,連接器必須有目標的函數庫文件,也就是 .so 文件,對應 Windows 是 .dll 文件。連接器把函數調用正確的掛接到對應的函數入口上)。linux header 就是 C 語言常見的 C header 文件和相關的開發數據。一般主要用來編譯 glibc ,glibc 作為中間層來提供內核相關調用。當然程序有些時候也會直接調用內核函數,這樣這些程序在編譯時也需要 kernel 的 header 。

這兩套東西一個輸出你當前 PC 的程序,一個輸出 ARM 的程序。兩個 GCC 套裝之間不能互相替換。只能自己輸出屬於自己的程序。
但是這兩套程序雖然輸出的程序不同,但可以運行的部分,卻都是在你的計算機上運行。而且你本機的 GCC 因為可以輸出本機的程序。所以你需要用他來輸出在你本機運行,但是卻輸出 ARM 程序的 GCC 套裝。

這就好比兩個錘子,一個錘子用來打鐵,一個錘子用來打錫。用途不同,但這兩個錘子都是鐵做的。
你作這個交叉編譯工具鏈,就是用你手裡已經有的打鐵的錘子,打出一個用鐵製作的用來打錫的錘子。這個打錫的錘子是不能打鐵的,同樣這個打鐵的錘子是不能用來打錫的。

㈦ 什麼是工具鏈

機器上。兩個機子有不同的機器指令。
工具鏈:可能指編譯、匯編、鏈接等一整套工具。

下面摘錄一段:
DIY自己的GNU交叉工具鏈(i386-arm)
嵌入式設備由於不具備一定的處理器能力和存儲空間,程序開發一般用PC來完成,然後將可執行文件下載到嵌入式系統中運行。這是目前嵌入式程序開發的不二選擇——Host/target模式。但這引發了一個問題:由於Host和Target的處理器體系結構不同,我們不能直接用PC上既有的程序開發工具,必須使用跨平台開發工具,即在Host上生成能在Target上運行格式的目標文件。

與在PC上進行程序開發類似,嵌入式系統開發也需要編譯器、鏈接器、解釋程序等。本文討論GNU跨平台開發工具鏈的建立,包括: ld, gas, ar, gcc, glibc.

自己建立交叉編譯環境是一件很頭疼的事(處理版本的依賴性, 漫長的編譯過程...),如果你不想經歷這樣的痛苦,可以選擇網上編譯好了的工具鏈進行安裝.如果你用的是Debian/Ubuntu的發行版, 推薦使用Emdebian. 如果使用uClinux, 也可安裝arm-elf-tools.

關於Emdebian和arm-elf-tools的更多介紹, 情看本blog的這篇文章!

閱讀全文

與編譯器工具鏈關系相關的資料

熱點內容
爬山演算法相關題目 瀏覽:720
vc編程大全 瀏覽:114
excel表格單列數據加密 瀏覽:646
給同事的解壓話語 瀏覽:990
linux關閉網卡命令行 瀏覽:452
史上最漂亮程序員 瀏覽:768
java實現excel的導入 瀏覽:758
光遇賬號如何轉移安卓 瀏覽:266
5分之13除以26的演算法 瀏覽:342
蘭州安寧區買解壓包子 瀏覽:641
php接收圖片代碼 瀏覽:668
hci命令 瀏覽:662
福建伺服器大區雲空間 瀏覽:840
筆桿子程序員 瀏覽:745
手機軟體易驗證加密 瀏覽:589
文檔加密只讀模式也不能看到 瀏覽:431
把jpg轉換成pdf的軟體 瀏覽:874
linuxeth0mac 瀏覽:192
windows編程知乎 瀏覽:442
壓縮工期超過40 瀏覽:249