编译时“-nostdlib”的使用
原文轉(zhuǎn)載于:《ARM-LINUX-GCC -NOSTDLIB》http://blog.chinaunix.net/uid-26739173-id-3154722.html
在韋東山的mmu實(shí)驗(yàn)的 Makefile 中出現(xiàn):
?
此常見(jiàn)的錯(cuò)誤的原因是: 編譯時(shí)沒(méi)有加上選項(xiàng)(-nostdlib)
-nostdlib作用: 不連接系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件和標(biāo)準(zhǔn)庫(kù)文件,只把指定的文件傳遞給連接器。這個(gè)選項(xiàng)常用于編譯內(nèi)核、bootloader等程序,它們不需要啟動(dòng)文件、標(biāo)準(zhǔn)庫(kù)文件。
C語(yǔ)言程序執(zhí)行的第一條指令。并不是main函數(shù)。生成一個(gè)C程序的可執(zhí)行文件時(shí)編譯器通常會(huì)在我們的代碼上加上幾個(gè)被稱為啟動(dòng)文件的代crt1.o,crti.o,crtend.o,crtn.o等,他們是標(biāo)準(zhǔn)庫(kù)文件。這些代碼設(shè)置C程序的堆棧等,然后調(diào)用main函數(shù)。他們依賴于操作系統(tǒng),在裸板上無(wú)法執(zhí)行,所以我們自己寫(xiě)一個(gè)。
所以,我們自己寫(xiě)的*.S匯編文件就是一個(gè)啟動(dòng)文件,它設(shè)置好堆棧后調(diào)用main函數(shù)。因此,我們不需要系統(tǒng)自帶的啟動(dòng)文件。 因此 我們只需修改其Makefile文件:
%.o:%.carm-linux-gcc -Wall -nostdlib -O2 -c -o $@ $<%.o:%.S arm-linux-gcc -Wall -nostdlib -O2 -c -o $@ $<再次make 就ok啦 。
總結(jié)
以上是生活随笔為你收集整理的编译时“-nostdlib”的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 单链表的建立和打印
- 下一篇: C 关于unsigned int com