arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o start.o start.s 什麼意思? 2020-11-21

GoogleFellow發表於2020-11-21

目錄

1、arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o start.o start.s

Wall:【Warning all】

-O0:【Optimize 優化】 

-nostdlib:【No Standard Library 】 

2、參考連結

2.1 Makefile中的-Wall -O2 -Os -g等選項介紹

2.2 gcc – g,靜態初始化和-nostdlib

2.3 編譯時“-nostdlib”的使用

2.4 使用GNU編譯器集合(GCC)官方手冊


1、arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o start.o start.s

Wall:【Warning all】

選項可以列印出編譯時所有的錯誤或者警告資訊。這個選項很容易被遺忘,編譯的時候,沒有錯誤或者警告提示,以為自己的程式很完美,其實,裡面有可能隱藏著許多陷阱。變數沒有初始化,型別不匹配,或者型別轉換錯誤等警告提示需要重點注意,錯誤就隱藏在這些程式碼裡面。沒有使用的變數也需要注意,去掉無用的程式碼,讓整個程式顯得乾淨一點。下次寫Makefile的時候,一定加-Wall編譯選項。

-O0:【Optimize 優化】 

表示編譯時沒有優化。

-O1: 表示編譯時使用預設優化。

-O2: 表示編譯時使用二級優化。

-O3: 表示編譯時使用最高階優化。

-Os:相當於-O2.5優化,但又不所見程式碼尺寸,具體見連結:點選開啟連結 點選開啟連結

-nostdlib:【No Standard Library 】 

不連線系統標準啟動檔案和標準庫檔案,只把指定的檔案傳遞給聯結器。這個選項常用於編譯核心、bootloader等程式,它們不需要啟動檔案、標準庫檔案。

從 gcc linker docs,

-nostdlib

Do not use the standard system startup files or libraries when
linking. No startup files and only the libraries you specify will be
passed to the linker
, and options specifying linkage of the system
libraries, such as -static-libgcc or -shared-libgcc, are ignored.

因此使用,

-nodefaultlibs

連結時請勿使用標準系統庫.只有您指定的庫才會傳遞給連結器,指定系統庫連結的選項(如-static-libgcc或-shared-libgcc)將被忽略.除非使用-nostartfiles,否則標準啟動檔案將正常使用.編譯器可能會生成對memcmp,memset,memcpy和memmove的呼叫.這些條目通常由libc中的條目解析.指定此選項時,應通過其他機制提供這些入口點.

 

2、參考連結

2.1 Makefile中的-Wall -O2 -Os -g等選項介紹

https://blog.csdn.net/shenhuan1104/article/details/76861029?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

2.2 gcc – g,靜態初始化和-nostdlib

http://www.voidcn.com/article/p-kiqmapwv-btm.html

2.3 編譯時“-nostdlib”的使用

https://blog.csdn.net/weibo1230123/article/details/82817006

2.4 使用GNU編譯器集合(GCC)官方手冊

https://gcc.gnu.org/onlinedocs/gcc/index.html#SEC_Contents

https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

 

相關文章