❶ 交叉編譯環境包括哪些工具,它的作用是什麼
首先你要知道一個軟體可能需要在多個CPU架構的平台上運行,如ARM架構,X86架構等等。
假設你要開發一個軟體目標平台是ARM,那麼你可以選擇在PC上,即X86平台上進行開發,然後使用交叉編譯工具把軟體編譯成ARM架構版本,然後才能在ARM上運行,如果只是用一般的編譯工具鏈,那麼只能編譯在當前平台上運行。
至於編譯工具鏈有哪些,具體要看你的開發平台和目標平台,會對應不同的編譯工具。
❷ 在windows上生產linux執行程序的交叉編譯工具鏈叫什麼
交叉編譯出來的文件在目標機上無法運行大多由兩個原因造成: 1 交叉編譯工具鏈與目標機架構不匹配,也就是選錯了編譯工具; 2 缺少依賴庫,這種情況可使用ldd命令查看依賴項,檢查一下是否缺少依賴庫文件
❸ 什麼是交叉編譯工具鏈
內核不同就需要交叉編譯。簡單的說,就是在一個平台上生成另一個平台上的可執行代碼;
❹ linux 交叉編譯器 有哪些
編譯選項個數
內核的編譯選項的個數非常多, v2.6.38的內核中就有 12 000 個左右的設置選項(這是包含所有arch的配置選項).
內核編譯選項不僅多, 有些編譯選項之間還存在依賴關系, 所以手動設置編譯選項幾乎是不可能的.
值得慶幸的是, 只要知道自己需要設置的那些選項, 就可以使用 make ***config 來進行設置, 它還會自動處理依賴關系.
配置編譯選項:
設置內核編譯選項是通過 kconfig 這個工具來完成的.
kconfig 的源碼就是內核代碼中 script/kconfig 目錄下
各個編譯選項的選擇有3種方式:
編譯方法:
make menuconfig :: 源碼根目錄下生成 .config (沒有會自動生成), .config中就是各個內核編譯選項的選擇狀況.
make defconfig :: 根據當前系統的架構默認 .config 生成內核源碼目錄下的 .config (每個架構的配置文件: ex. arch/x86/configs/x86_64_defconfig)
make oldconfig :: 將已有的 .config 放到源碼根目錄下後執行, 目的是為了復用之前的內核編譯選項的配置.
make xconfig :: 圖形化配置, 需要qt3, 個人覺得沒有必要, 有 make menuconfig 就足夠了.
make localmodconfig :: 生成以正在使用的內核模塊為對象的 .config
=y :: 直接編譯到內核中
=m :: 以模塊方式編譯到內核中
不設置 :: 不編譯
❺ 交叉編譯器為什麼叫交叉編譯交叉
交叉編譯這個概念的出現和流行是和嵌入式系統的廣泛發展同步的。我們常用的計算機軟體,都需要通過編譯的方式,把使用高級計算機語言編寫的代碼(比如C代碼)編譯(compile)成計算機可以識別和執行的二進制代碼。比如,我們在Windows平台上,可使用Visual C++開發環境,編寫程序並編譯成可執行程序。這種方式下,我們使用PC平台上的Windows工具開發針對Windows本身的可執行程序,這種編譯過程稱為native compilation,中文可理解為本機編譯。
然而,在進行嵌入式系統的開發時,運行程序的目標平台通常具有有限的存儲空間和運算能力,比如常見的 ARM 平台,其一般的靜態存儲空間大概是16到32MB,而CPU的主頻大概在100MHz到500MHz之間。這種情況下,在ARM平台上進行本機編譯就不太可能了,這是因為一般的編譯工具鏈(compilation tool chain)需要很大的存儲空間,並需要很強的CPU運算能力。
為了解決這個問題,交叉編譯工具就應運而生了。通過交叉編譯工具,我們就可以在CPU能力很強、存儲空間足夠的主機平台上(比如PC上)編譯出針對其他平台的可執行程序。
要進行交叉編譯,我們需要在主機平台上安裝對應的交叉編譯工具鏈(cross compilation tool chain),然後用這個交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標平台上運行的代碼。
❻ 列舉國產交叉編譯開發工具
摘要 1. 編譯部分:
❼ 交叉編譯器的分類
編譯器可以生成用來在與編譯器本身所在的計算機和操作系統(平台)相同的環境下運行的目標代碼,這種編譯器又叫做「本地」編譯器。另外,編譯器也可以生成用來在其它平台上運行的目標代碼,這種編譯器又叫做交叉編譯器。交叉編譯器在生成新的硬體平台時非常有用。「源碼到源碼編譯器」是指用一種高階語言作為輸入,輸出也是高階語言的編譯器。例如: 自動並行化編譯器經常採用一種高階語言作為輸入,轉換其中的代碼,並用並行代碼注釋對它進行注釋(如OpenMP)或者用語言構造進行注釋(如FORTRAN的DOALL指令)。
預處理器(preprocessor)
作用是通過代入預定義等程序段將源程序補充完整。
編譯器前端(frontend)
前端主要負責解析(parse)輸入的源代碼,由語法分析器和語意分析器協同工作。語法分析器負責把源代碼中的『單詞』(Token)找出來,語意分析器把這些分散的單詞按預先定義好的語法組裝成有意義的表達式,語句 ,函數等等。 例如「a = b + c;」前端語法分析器看到的是「a, =, b , +, c;」,語意分析器按定義的語法,先把他們組裝成表達式「b + c」,再組裝成「a = b + c」的語句。 前端還負責語義(semantic checking)的檢查,例如檢測參與運算的變數是否是同一類型的,簡單的錯誤處理。最終的結果常常是一個抽象的語法樹(abstract syntax tree,或 AST),這樣後端可以在此基礎上進一步優化和處理。
編譯器後端(backend)
編譯器後端主要負責分析,優化中間代碼(Intermediate representation)以及生成機器代碼(Code Generation)。
一般說來所有的編譯器分析,優化,變型都可以分成兩大類:函數內(intraproceral)還是函數之間(interproceral)進行。很明顯,函數間的分析,優化更准確,但需要更長的時間來完成。
❽ 什麼是交叉編譯器
交叉編譯器:在一種計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼
❾ 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下用交叉編譯器編譯時,已經指定了庫的路徑跟庫的名字,可是還是報錯找不到庫。
看起來它不是個庫,倒像是個可執行程序
一般so都放在lib這樣的目錄下,你這個是bin,而且和它在一起的都是可執行程序,並且它沒有so後綴名。