導航:首頁 > 源碼編譯 > 樹莓派gcc編譯選項x86

樹莓派gcc編譯選項x86

發布時間:2023-12-13 07:57:00

❶ 有沒有人在mac上安裝過linuxx86的交叉編譯器gcc

有。可以通過在Mac上安裝虛擬機或使用Docker等容器技術來模擬Linux環境,並在其中安裝gcc進行交叉編譯,還可以考慮使用MacPorts或逗消Homebrew等包管理器來安裝gcc。Mac是蘋果公司自1984年起以Macintosh開始開發的個人鋒指喚消費型計算機,如:iMac、Macmini、MacbookAir、MacbookPro、銀凱Macbook、MacPro等計算機,是一套完備而獨立的操作系統。

❷ 32 位支持:使用 GCC 交叉編譯

如果你是一個開發者,要創建二進制軟體包,像一個 RPM、DEB、Flatpak 或 Snap 軟體包,你不得不為各種不同的目標平台編譯代碼。典型的編譯目標包括 32 位和 64 位的 x86 和 ARM。你可以在不同的物理或虛擬機器上完成你的構建,但這需要你為何幾個系統。作為代替,你可以使用 GNU 編譯器集合 ( GCC ) 來交叉編譯,在單一的構建機器上為幾個不同的 CPU 架構產生二進制文件。

假設你有一個想要交叉編譯的簡單的擲骰子 游戲 。在大多數系統上,以 C 語言來編寫這個相對簡單,出於給添加現實的復雜性的目的,我以 C++ 語言寫這個示例,所以程序依賴於一些不在 C 語言中東西 (具體來說就是 iostream)。

在你的系統上使用 g++ 命令編譯它:

然後,運行它來確認其工作:

你可以使用 file 命令來查看你剛剛生產的二進制文件的類型:

同樣重要,使用 ldd 命令來查看它鏈接哪些庫:

從這些測試中,你已經確認了兩件事:你剛剛運行的二進制文件是 64 位的,並且它鏈接的是 64 位庫。

這意味著,為實現 32 位交叉編譯,你必需告訴 g++ 來:

為編譯成 32 位二進制,你需要在你的系統上安裝 32 位的庫和頭文件。如果你運行一個純 64 位系統,那麼,你沒有 32 位的庫或頭文件,並且需要安裝一個基礎集合。最起碼,你需要 C 和 C++ 庫(glibc 和 libstdc++)以及 GCC 庫(libgcc)的 32 位版本。這些軟體包的名稱可能在每個發行版中不同。在 Slackware 系統上,一個純 64 位的帶有 32 位兼容的發行版,可以從 Alien BOB 提供的 multilib 軟體包中獲得。在 Fedora、CentOS 和 RHEL 系統上:

不管你正在使用什麼系統,你同樣必須安裝一些你工程使用的 32 位庫。例如,如果你在你的工程中包含 yaml-cpp,那麼,在編譯工程前,你必需安裝 yaml-cpp 的 32 位版本,或者,在很多系統上,安裝 yaml-cpp 的開發軟體包(例如,在 Fedora 系統上的 yaml-cpp-devel)。

一旦這些處理好了,編譯是相當簡單的:

-m32 標志告訴 GCC 以 32 位模式編譯。-march=i686 選項進一步定義來使用哪種最優化類型(參考 info gcc 了解選項列表)。-L 標志設置你希望 GCC 來鏈接的庫的路徑。對於 32 位來說通常是 /usr/lib,不過,這依賴於你的系統是如何設置的,它可以是 /usr/lib32,甚至 /opt/usr/lib,或者任何你知道存放你的 32 位庫的地方。

在代碼編譯後,查看你的構建的證據:

接著,當然, ldd ./dice32 也會指向你的 32 位庫。

在 64 位相同的處理器家族上允許 GCC 做出很多關於如何編譯代碼的假設來編譯 32 位軟體。如果你需要為完全不同的處理器編譯,你必需安裝適當的交叉構建實用程序。安裝哪種實用程序取決於你正在編譯的東西。這個過程比為相同的 CPU 家族編譯更復雜一點。

當你為相同處理器家族交叉編譯時,你可以期待找到與 32 位庫集的相同的 64 位庫集,因為你的 Linux 發行版是同時維護這二者的。當為一個完全不同的架構編譯時,你可能不得不窮追你的代碼所需要的庫。你需要的版本可能不在你的發行版的存儲庫中,因為你的發行版可能不為你的目標系統提供軟體包,或者它不在容易到達的位置提供所有的軟體包。如果你正在編譯的代碼是你寫的,那麼你可能非常清楚它的依賴關系是什麼,並清楚在哪裡找到它們。如果代碼是你下載的,並需要編譯,那麼你可能不熟悉它的要求。在這種情況下,研究正確編譯代碼需要什麼(它們通常被列在 README 或 INSTALL 文件中,當然也出現在源文件代碼自身之中),然後收集需要的組件。

例如,如果你需要為 ARM 編譯 C 代碼,你必須首先在 Fedora 或 RHEL 上安裝 gcc-arm-linux-gnu(32 位)或 gcc-aarch64-linux-gnu(64 位);或者,在 Ubuntu 上安裝 arm-linux-gnueabi-gcc 和 binutils-arm-linux-gnueabi。這提供你需要用來構建(至少)一個簡單的 C 程序的命令和庫。此外,你需要你的代碼使用的任何庫。你可以在慣常的位置(大多數系統上在 /usr/include)放置頭文件,或者,你可以放置它們在一個你選擇的目錄,並使用 -I 選項將 GCC 指向它。

當編譯時,不使用標準的 gcc 或 g++ 命令。作為代替,使用你安裝的 GCC 實用程序。例如:

驗證你構建的內容:

這是一個如何使用交叉編譯的簡單的示例。在真實的生活中,你的源文件代碼可能產生的不止於一個二進制文件。雖然你可以手動管理,在這裏手動管理可能不是好的正當理由。在我接下來的文章中,我將說明 GNU 自動工具,GNU 自動工具做了使你的代碼可移植的大部分工作。

via: https://opensource.com/article/19/7/cross-compiling-gcc

作者: Seth Kenlon 選題: lujun9972 譯者: robsean 校對: wxy

❸ 怎麼用gcc編譯文件

在終端中輸入 gcc 文件名 -o 目標文件名x0dx0a然後 ./目標文件名 就行了,沒有目標文件名,自動存為 ax0dx0a執行 ./a 就行了。x0dx0ax0dx0a在使用Gcc編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,其中多數參數我們可能根本就用不到,這里只介紹其中最基本、最常用的參數。x0dx0aGCC最基本的用法是∶gcc [options] [filenames]x0dx0a其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。x0dx0a-c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。x0dx0a-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。x0dx0a-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。x0dx0a-O,對程序進行優化編譯、連接,採用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。x0dx0a-O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢。x0dx0a-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數。C程序中的頭文件包含兩種情況∶x0dx0aA)#include x0dx0aB)#include 「myinc.h」x0dx0a其中,A類使用尖括弧(< >),B類使用雙引號(「 」)。對於A類,預處理程序cpp在系統預設包含文件目錄(如/usr/include)中搜尋相應的文件,而B類,預處理程序在目標文件的文件夾內搜索相應文件。 x0dx0ax0dx0aGCC執行過程示例x0dx0ax0dx0a示例代碼 a.c:x0dx0a#include x0dx0aint main()x0dx0a{x0dx0aprintf("hello\n");x0dx0a}x0dx0a預編譯過程:x0dx0a這個過程處理宏定義和include,並做語法檢查。x0dx0a可以看到預編譯後,代碼從5行擴展到了910行。x0dx0agcc -E a.c -o a.ix0dx0acat a.c | wc -lx0dx0a5x0dx0acat a.i | wc -lx0dx0a910x0dx0a編譯過程:x0dx0a這個階段,生成匯編代碼。x0dx0agcc -S a.i -o a.sx0dx0acat a.s | wc -lx0dx0a59x0dx0a匯編過程:x0dx0a這個階段,生成目標代碼。x0dx0a此過程生成ELF格式的目標代碼。x0dx0agcc -c a.s -o a.ox0dx0afile a.ox0dx0aa.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not strippedx0dx0a鏈接過程:x0dx0a鏈接過程。生成可執行代碼。鏈接分為兩種,一種是靜態鏈接,另外一種是動態鏈接。使用靜態鏈接的好處是,依賴的動態鏈接庫較少,對動態鏈接庫的版本不會很敏感,具有較好的兼容性;缺點是生成的程序比較大。使用動態鏈接的好處是,生成的程序比較小,佔用較少的內存。x0dx0agcc a.o -o ax0dx0a程序運行:x0dx0a./ax0dx0ahellox0dx0a編輯本段x0dx0aGCC編譯簡單例子x0dx0ax0dx0a編寫如下代碼:x0dx0a#include x0dx0aint main()x0dx0a{x0dx0aprintf("hello,world!\n");x0dx0a}x0dx0a執行情況如下:x0dx0agcc -E hello.c -o hello.ix0dx0agcc -S hello.i -o hello.sx0dx0agcc -c hello.s -o hello.ox0dx0agcc hello.c -o hellox0dx0a./hellox0dx0ahello,world!

❹ 樹莓派Linux內核編譯選項如何開啟TPM 2.0

本文更新於2018-08-11

首發於, 文章鏈接 http://www.jianshu.com/p/174844b99716
同步至GitHub: https://github.com/liuqun/linux/wiki

定製樹莓派內核源碼, 通過樹莓派SPI介面載入並訪問TPM2.0設備

所需硬體: X86主機一台, 樹莓派3-B型號開發板一塊, 大容量Micro-SD卡+USB讀卡器一個, 英飛凌TPM2.0評估板一套

所需軟體: 任意版本樹莓派固件(推薦使用 最新版本 ), Ubuntu Linux 虛擬機, gcc-arm-linux-gnueabihf 交叉編譯器, libncurses5(編譯Linux內核配置菜單界面)

取出樹莓派的SD卡, 通過讀卡器插入 Ubuntu 主機或將讀卡器 USB 設備接入 VMware 虛擬機。Ubuntu 默認自動將 U 盤掛載到 /media/$USER/boot 和 /media/$USER/【根文件系統分區】

(以下為覆蓋式安裝, 如果不放心請自行備份SD卡上的原有內核及模塊文件)

選中 5. Interfacing Options --- P4 SPI(啟用/禁用SPI串口)
重啟樹莓派,開機後檢查/dev/tpm0設備文件是否已經載入就緒

❺ 為什麼x86和arm的架構不同,但是都能裝linux呢,他們的編譯時如何實現的。

rm架構和x86架構區別:

一、性能:

X86結構的電腦無論如何都比ARM結構的系統在性能方面要快得多、強得多。X86的CPU隨便就是1G以上、雙核、四核大行其道,通常使用45nm(甚至更高級)製程的工藝進行生產;

而ARM方面:CPU通常是幾百兆,最近才出現1G左右的CPU,製程通常使用不到65nm製程的工藝,可以說在性能和生產工藝方面ARM根本不是X86結構系統的對手。

但ARM的優勢不在於性能強大而在於效率,ARM採用RISC流水線指令集,在完成綜合性工作方面根本就處於劣勢,而在一些任務相對固定的應用場合其優勢就能發揮得淋漓盡致。

二、擴展能力:

X86結構的電腦採用「橋」的方式與擴展設備(如:硬碟、內存等)進行連接,而且x86結構的電腦出現了近30年,其配套擴展的設備種類多、價格也比較便宜,所以x86結構的電腦能很容易進行性能擴展,如增加內存、硬碟等。

ARM結構的電腦是通過專用的數據介面使CPU與數據存儲設備進行連接,所以ARM的存儲、內存等性能擴展難以進行(一般在產品設計時已經定好其內存及數據存儲的容量),所以採用ARM結構的系統,一般不考慮擴展。基本奉行「夠用就好」的原則。

三實現編譯:

因為linux是系統,他支持現在大多數的結構體系。而要使他移植到相應的不同的硬體平台上時,需要對內核源碼進行相對應的交叉編譯處理,然後才能進行燒寫運行,因為都有驅動只要那個系統有對應平台的驅動就可以。

(5)樹莓派gcc編譯選項x86擴展閱讀:

Linux常用命令

1、pwd命令該命令的英文解釋為print working directory(列印工作目錄)。

2、輸入pwd命令,Linux會輸出當前目錄。

3、cd命令cd命令用來改變所在目錄。

4、cd / 轉到根目錄中

5、cd ~ 轉到/home/user用戶目錄下

6、cd /usr 轉到根目錄下的usr目錄中-------------絕對路徑

7、cd test 轉到當前目錄下的test子目錄中-------相對路徑

8、cat命令可以用來合並文件,也可以用來在屏幕上顯示整個文件的內容。

9、cat snow.txt 該命令顯示文件snow.txt的內容,ctrl+D退出cat。

閱讀全文

與樹莓派gcc編譯選項x86相關的資料

熱點內容
javaresponse文件 瀏覽:732
linuxrar壓縮文件夾 瀏覽:216
魅藍手機連接不上伺服器怎麼回事 瀏覽:377
工行app怎麼改已綁定銀行卡 瀏覽:531
oppo晶元程序員 瀏覽:600
oppok3應用怎麼加密 瀏覽:325
電腦軟盤怎麼加密碼 瀏覽:813
伺服器光交換機有什麼用 瀏覽:706
app上怎麼拍蛙小俠 瀏覽:215
志高聊天app怎麼下載 瀏覽:633
郵政app怎麼不能掃付款碼 瀏覽:557
筆記本電腦雙理由配置命令 瀏覽:63
拿著文件夾怎麼畫 瀏覽:875
博瑞發動機壓縮比 瀏覽:730
linux開源郵件伺服器 瀏覽:777
ios打地鼠源碼 瀏覽:472
伺服器換主機需要什麼系統 瀏覽:749
linux監控jvm內存 瀏覽:79
空調壓縮機自製工具 瀏覽:518
命令行控制路由器 瀏覽:957