最近有很多朋友在探討關於建立Linux交叉編譯環境的問題,下面就一些問題作一個說明,以期拋磚引玉。 基於Linux操作系統的應用開發環境一般是由目標系統硬體(開發板)和宿主PC機所構成。目標硬體開發板用於運行操作系統和系統應用軟體,而目標板所用到的操作系統的內核編譯、應用程序的開發和調試則需要通過宿主PC機來完成(所以稱為交叉編譯)。雙方之間一般通過串口,並口或乙太網介面建立連接關系。 但在此我建議構建如下的交叉編譯環境,適合個人或研發小組使用:單獨拿出一台PC機(PII以上即可,就用以前淘汰的舊機器就可以),在該PC上安裝桌面的Linux操作系統(如Red Hat Linux 8.0及以上),可以採用默認的安裝選項(注意要包含FTP服務),這台PC作為Linux伺服器,除管理員以外,一般不直接讓其他人去操作。 將該Linux伺服器接入區域網,並新建一些合法用戶,以便其他的PC機(在此我們將其稱為工作站)的合法用戶能訪問到Linux伺服器。而其他的PC機(工作站)仍然使用Windows操作系統,原來幹啥繼續幹啥。 需要的軟體工具包括: 1、FTP客戶端程序(如Cuteftp,可到網上下載)。 2、Telnet工具(如SecureCRT,可到網上下載)。 3、移植到某一特定ARM平台的Linux操作系統內核源碼(一般由銷售商整理提供)。 4、GNU編譯工具,可由相關網站下載,或由銷售商整理提供。 在工作站安裝:在某工作站PC上安裝FTP客戶端程序和Telnet工具,安裝完畢後應該可以在該工作站PC和Linux伺服器之間進行文件的傳輸,並在工作站PC可以通過Telnet登陸到Linux伺服器(可能需要將Linux伺服器的防火牆服務關閉才能完成)。 在Linux伺服器安裝:將工作站PC上的Linux操作系統內核源碼壓縮包和GNU編譯工具通過FTP傳送到Linux伺服器的某個目錄(如合法的用戶目錄),然後在該目錄下解壓,並將GNU編譯工具安裝到默認的工作目錄即可,以上工作通過在工作站PC使用Telnet工具完成,而不需要在Linux伺服器上進行。 Linux操作系統內核的編譯:Linux操作系統內核的編譯一般有一個比較固定的步驟,會根據MakeFile文件的不同而略有差異,可參考相關文檔,編譯的工作在工作站PC使用Telnet工具完成。 按固定的步驟編譯內核完成以後,會在相應目錄生成可執行的二進制文件,通過FTP將該可執行的二進制文件傳回工作站PC,然會再通過ADS或SDT下的燒寫工具寫入開發板的Flash即可。 (T004)
B. 怎麼在linux下搭建C的編譯環境!!
linux下c程序的編輯,編譯和運行以及調試
要使用的工具:
編輯:vim(vi)
編譯和運行:gcc
調試:gdb
1.
安裝很簡單(以下是以在centos中安裝為例):
yum
vim
gcc
gdb
2.
使用vim編輯源文件
首先,打開終端練下手:
vim
hello.c
3.
(進入一般模式)
按下"i",進入編輯模式,在編輯模式下輸入:
#include
int
main(){
printf("hello,
world!\n");
return
0;
}
4.
輸入完成,按"esc"鍵,回到一般模式,然後按下":wq",即可保存並退出vim。
C. 適合win10系統的c語言編譯器
桌面操作系統
對於當前主流桌面操作系統而言,可使用 VisualC++、GCC以及 LLVM Clang 這三大編譯器。
Visual C++(簡稱 MSVC)只能用於 Windows 操作系統;GCC 和 LLVM Clang除了可用於Windows操作系統之外,主要用於 Unix/Linux操作系統。
像現在很多版本的 Linux 都默認使用 GCC 作為C語言編譯器,而像 FreeBSD、macOS 等系統默認使用 LLVM Clang 編譯器。由於當前 LLVM 項目主要在 Apple 的主推下發展的,所以在 macOS中,Clang 編譯器又被稱為 Apple LLVM 編譯器。
MSVC 編譯器主要用於 Windows 操作系統平台下的應用程序開發,它不開源。用戶可以使用 Visual Studio Community 版本來免費使用它,但是如果要把通過 Visual Studio Community 工具生成出來的應用進行商用,那麼就得好好閱讀一下微軟的許可證和說明書了。
而使用 GCC 與 Clang 編譯器構建出來的應用一般沒有任何限制,程序員可以將應用程序隨意發布和進行商用。
MSVC 編譯器對 C99 標準的支持就十分有限,加之它壓根不支持任何 C11 標准,所以本教程中設計 C11 的代碼例子不會針對 MSVC 進行描述。所幸的是,Visual Studio Community 2017 加入了對 Clang 編譯器的支持,官方稱之為——Clang with Microsoft CodeGen,當前版本基於的是 Clang 3.8。
也就是說,應用於 Visual Studio 集成開發環境中的 Clang 編譯器前端可支持 Clang 編譯器的所有語法特性,而後端生成的代碼則與 MSVC 效果一樣,包括像 long 整數類型在 64 位編譯模式下長度仍然為 4 個位元組,所以各位使用的時候也需要注意。
為了方便描述,本教程後面涉及 Visual Studio 集成開發環境下的 Clang 編譯器簡稱為 VS-Clang 編譯器。
嵌入式系統
而在嵌入式系統方面,可用的C語言編譯器就非常豐富了,比如:
用於 Keil 公司 51 系列單片機的 Keil C51 編譯器;
當前大紅大紫的 Arino 板搭載的開發套件,可用針對 AVR 微控制器的 AVRGCC 編譯器;
ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和當前最新的 DS-5 Studio;
DSP 設計商 TI(Texas Instruments)的 CCS(Code Composer Studio);
DSP 設計商 ADI(Analog Devices,Inc.)的 Visual DSP++ 編譯器,等等。
D. 如何用gentoo交叉編譯一個基本系統
嵌入式系統的編譯環境
為某個平台開發軟體,首先需要一個編譯環境。一般來說,編譯環境包括三部分:工具 鏈/運行環境/編譯方法。對於嵌入式系統來說,常見的編譯環境有三種:
本地環境。如很流行的Ubuntu for ARM,利用官方製作好的目標機鏡像(通常包含了 編譯環境),直接在目標機上編譯/安裝軟體,與PC機開發完全一樣。這種方法簡單省 事。缺點也顯而易見,編譯速度慢,耗時長,特別是較大的軟體包(如xbmc)的時候, 程序員不是停下來喝杯咖啡就可以收攤,恐怕得打場通宵dota後才能看到結果 了…(或許distcc能有所改善)
虛擬環境。在PC上建立目標機的虛擬環境,如QEMU-ARM,然後chroot到虛擬環境 中編譯/安裝軟體。這種方法利用了PC的處理能力,速度比本地環境要快得多,但 QEMU並不能完美的模擬目標機環境,如不支持某些系統調用等,這可能導致它不能 正確的編譯某些軟體。
交叉編譯。為目標機交叉編譯軟體,這是最常規的辦法,也是上面兩種方法實現的基 礎。說交叉編譯是「臟活」,是因為需要手工解決軟體包的所有依賴問題,手工編譯 每一個軟體包,並且解決軟體包對目標機兼容問題… 看網上鋪天蓋地關於求教/指導 某個軟體包如何正確交叉編譯就知道,有多少程序員在被它虐?
gentoo下的交叉編譯
gentoo是一個metadistribution,從源代碼構建整個系統,同時支持很多不同的體 系如alpha/arm/hppa/ppc/sh/sparc/s390等,也為交叉編譯提供了便利的工具,這是 其它二進制發行版沒有辦法比擬的(scratchbox也顯得弱爆了)。
gentoo下的交叉編譯通過crossdev和portage來實現。portage帶來的好處是自 動解決依賴和自動升級更新系統,跟本機環境一樣。
製作工具鏈
crossdev用來製作交叉工具鏈,並且還提供了交叉編譯環境下的emerge的輔助腳本。如 下編譯arm平台的工具鏈:
$ sudo crossdev -t arm-supertux-linux-gnueabi
這樣,crossdev最終製作了符合「gentoo規范」的arm交叉編譯器。
運行環境
crossdev生成/usr/arm-supertux-linux-gnueabi/目錄作為目標系統 $buildroot。編譯後生成的目標會被emerge到$buildroot,編譯時依賴的環境(如 鏈接庫/頭文件/pkgconfig等)也都在$buildroot。
交叉編譯
有了工具鏈/運行環境,使用的crossdev封裝過的emerge,就可以自由的emerge了。 如交叉編譯bash:
$ sudo emerge-arm-supertux-linux-gnueabi -avu bash
porage會自動把bash的依賴如ncurses/readline一起emerge到$buildroot。 交叉編譯就是變得如此簡單…
碰到的問題
站在巨人的肩膀上可以看的更遠,前提是我們先要爬上巨人的肩膀。portage是一個快 速更新迭代的系統,並不完美,維護者沒有辦法測試每個軟體包的所有兼容性。所以, 當你想安裝一個圖形環境如$emerge -avu enlightenment時,很可能會出現錯誤。但 portage提供了細粒度的控制幫助解決這樣的問題。下面是我碰到過一些情形和解決方 法:
由於軟體包的環境變數引起的問題,如鏈接庫指向了/usr/bin,而非 $buildroot。可以配置$buldroot/etc/portage/env/目錄下相應的文 件,portage會自動source該文件,從而改變編譯時的環境。
portage沒有包含該軟體或portage自身的bug引起,如默認使能了某個在目標機 平台不能使用的特性。建立一個針對目標機的overlay,自己編寫相應軟體包的 ebuild文件指導portage進行交叉編譯。
當某個軟體包分階段編譯時,如perl編譯時先生成miniperl,通過miniperl最 後生成perl目標映像。由於miniperl被交叉編譯器生成目標機的映像,正常情況 下不能主機環境中繼續運行生成最終的目標映像。這就要藉助qemu-arm+binfmt模 擬目標機環境,讓miniperl在主機環境中也能無縫的運行。
從形式上看,處理上面幾種情況,也是「臟活」。不僅需要了解該軟體包的編譯環境, 還需要了解portage的原理,還要知道ebuild的書寫語法。但是,與傳統的交叉編譯 方式比起來,這是一勞永逸的工作,別人使用我的運行環境和overlay,即不需再做什 么就能生成最終的目標機系統。
E. 如何在安卓系統下構建c++編譯環境
這個有點難,現在安卓能用的(我知道的)只有一個軟體C4droid可以在android系統中編譯c/c++:
編譯界面:
F. 如何在mac下搭建C/C++,Java的編譯環境
步驟如下:
1. Mac OS X 本身已經安裝好 jdk,所以搭建 Java Eclipse環境很簡單,只需要下載適合系統的 Eclipse即可,首先查看系統是幾位的(點擊 Mac 屏幕左上角的蘋果 Logo,選擇「關於本機」,在彈出的方形窗口裡點擊「更多信息…」按鈕,再點擊"系統報告…"按鈕,在「軟體」一欄就能看到目前你的蘋果電腦 Mac OS X 系統是否開啟 64 位運算了。)
2.下載 Eclipse( Java 和 C/C++的都需要)http://www.eclipse.org/downloads/
3.安裝 gcc編譯器 XCode(為 Eclipse Java集成 C/C++做准備)。
判斷系統里是否已經安裝 gcc編譯器的方法是,打開一個終端窗口(在實用工具文件夾里),輸入命令 g++,沒有則輸出 command not found,若安裝了則輸出 not input files。 XCode在 mac電腦的隨機安裝光碟里就有,最新版可以上蘋果官網上下載(http://developer.apple.com/technologies/xcode.html),但是需要注冊一個 Apple Developer帳號後才能下載。按照安裝程序步驟進行安裝就可以了。 安裝完後打開xcode,Preferences裡面有個Downloads裡面有個components選項,裡面有個command line tools 安裝上即可。
4. Eclipse整合 Java與 C/C++
解壓縮剛下載下來的兩個版本Eclipse (注意放在不同的地方,防止因為文件名相同覆蓋),然後將C/C++ 版本的Eclipse 裡面的plugins 文件夾中的內容全部復制,粘貼到Java 版本的Eclipse 裡面的plugins 文件夾下面(注意:不能覆蓋已有的文件或文件夾),OK 工具都弄好了,現在就剩下測試了。
5. 先創建一個 Java工程
6. 創建一個 C++項目
7. 編譯、運行程序
G. C語言中構建文件和編譯文件有什麼區別拜託,謝謝
不大清楚LZ的問題實質
但是可以簡單說 編譯過程是把你編寫的程序 轉化成一種可執行文件 在電腦上運行。
構建 可能是構建某種工程或者系統吧? 更多的側重在各個執行文件的搭配 相互調用上吧
希望有用
H. 從linux內核到嵌入式系統的構建。可以簡單說一下基本步驟嗎。
這樣說吧,先給你普及一下嵌入式系統的組成:
一般來說,嵌入式操作系統大都由三部分組成,分別是bootloader、kernel、rootfs,也就是引導啟動程序,內核,根文件系統。
所以要構建一個嵌入式系統不是從linux內核開始的,完整步驟應該是
先拿到一種bootloader(如u-boot1.1.6)源碼,修改編譯生成boot.bin的可執行引導鏡像文件,並燒寫到嵌入式設備的第一個分區里。必須從0x0開始。
然後拿到一種kernel源碼(如linux-2.6.18),修改編譯生成zImage或uImage這樣的可執行的內核鏡像文件,並燒寫到嵌入式設備的第二分區內。
最後通過buybox這樣的軟體構建rootfs,並編譯成進行,燒寫到嵌入式設備的第三個分區內。設置好所有啟動參數後,就構建完成了一個基本的嵌入式(linux)系統。
I. windows7怎麼搭建linux編譯環境
下載安裝虛擬機運行Linux系統,在虛擬系統中進行模擬編輯。