gcc編譯流程,交叉編譯

2021-08-23 14:34:21 字數 1208 閱讀 6249

gcc編譯過程:

預編譯:gcc -e c原始檔 -o 輸出i目標檔案;

編譯階段:gcc -s i原始檔 -o 輸出s目標檔案;

彙編階段:gcc -c s原始檔 -o 輸出o目標檔案;

gcc編譯例項:

gcc -g -wall c原始檔 -o 輸出可執行檔案;(-g表示在生成的目標檔案中帶除錯資訊,-wall表示開啟編譯器常用的警告,-w不開啟警告)

gcc -g -wall c原始檔 -lm -o 輸出可執行檔案;(-lm表示鏈結外部庫)

交叉編譯:

arm-linux-gcc -g c原始檔 -o 生成目標檔案;

產生問題:arm-linux-gcc test.c -o test

報錯如下

/usr/local/arm/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot open output file a.out: permission denied

collect2: ld returned 1 exit status

我加上sudo arm-linux-gcc test.c -o test

結果還是出錯,出錯資訊如下

sudo: arm-linux-gcc: command not found

解決辦法:使用su獲取root許可權,而不改變工作環境;

xx:~$ sudo passwd root

[sudo] password for xx: 輸入密碼

確認:輸入密碼

再確認:輸入密碼

提示成功更新密碼

此時,root使用者已經啟用。

進入root的操作如下:

xx:~$ su -root

密碼:輸入密碼

這裡說一下 su -root和su root的區別:

su  後面不加使用者是預設切到 root

su  是不改變當前變數

su - 是改變為切換到使用者的變數 

也就是說su只能獲得root的執行許可權,不能獲得環境變數

而su -是切換到root並獲得root的環境變數及執行許可權,此時,已經可以進行root許可權的操作了。

gcc編譯流程

可以利用gcc的引數來控制執行的過程,這樣就可以更深入的了解編譯c程式的過程。下面將通過對乙個程式的編譯來演示整個過程。includeint main 1 預處理 編譯器將c程式的標頭檔案編譯進來,還有巨集的替換,可以用gcc的引數 e來參看。命令 gcc e hello.c o hello.i 作...

gcc編譯流程

步驟命令 說明預處理 gcc e hello.c o hello.i 1.將所有 define刪除,並且展開所有的巨集定義 2.處理所有的條件預編譯指令,如 if ifdef undef ifndef endif elif 3.處理 include,將包含的檔案插入到此處,這是乙個遞迴的過程 4.刪...

GCC編譯流程

gcc使用的基本語法為 gcc option filename 這裡option是gcc使用時的一些選項,可以通過指定不同的選項實現不同的功能。這裡的filename是gcc要編譯的檔案,gcc會根據使用者指定的編譯選項以及所識別的檔案字尾名來對編譯檔案進行響應的處理。1,預處理階段 預處理功能分為...