一般如果gcc不能使用除法,make后的錯誤是:
每一個錯誤處都使用了除法。
我的makefile代碼如下:
CC = arm-linux-gcc
LD = arm-linux-ld
AR = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump
INCLUDEDIR := $(shell pwd)/include
CFLAGS := -Wall -O2
CPPFLAGS := -nostdinc -I$(INCLUDEDIR)
export CC LD AR OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS
objs := head.o init.o nand.o uart.o interrupt.o main.o lcd.o lib/libc.a sdcard.o adc_ts.o rtc.o timer.o
174.bin: $(objs)
${LD} $(LIBPATH) -T174.lds-o 174.elf$^ ${LIBPATH}
${OBJCOPY} -O binary -S 174.elf$@
${OBJDUMP} -D -m arm 174.elf > 174.dis
.PHONY:lib/libc.a
lib/libc.a:
cd lib;make ; cd ..
%.o:%.c
${CC} ${CPPFLAGS} ${CFLAGS} -c -o $@ $<
%.o:%.S
${CC} ${CPPFLAGS} ${CFLAGS} -c -o $@ $<
clean:
make clean -C lib
rm -f *.bin *.elf *.o *.dis
解決的方法是找出gcc除法庫libgcc.a的位置,我的是在/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2這個目錄下,在OBJDUMP = arm-linux-objdump和INCLUDEDIR := $(shell pwd)/include中間插入下面命令:
LIBPATH=-lgcc -L/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2
說明:其實gcc編譯器是不支持除法的,它是通過軟件實現除法運算,只要我們的makefile文件中包含了-lgcc庫,就能使用除法了。
2013.11.12
今天在重新編寫arm程序時,在實現增量式PID算法的式子中,各個變量定義為static signed long int的,用GCC編譯鏈接時出現如下錯誤。
原因是:
用交叉編譯器去編譯老版本的uboot會出錯:
/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2/libgcc.a(_dvmd_lnx):In function `__aeabi_ldiv0': (.text+0x8): undefined reference to `raise'
原因是:
Uboot是個非GNU/Linux的程序,是個裸程序(bare-metal application);
而交叉編譯器arm-linux-gcc是GNU/Linux工具鏈,是可以正常編譯Linux內核等東西的,
但是去編譯非GNU/Linux的Uboot的話,就會出現:
當出現被0除的情況時,會調用__aeabi_ldiv0(即eabi版本的__div0),當在GNU/Linux系統中時,其會去觸發系統的SIGFPE,進而調用到對應的raise(3)函數。
而此處,由于Uboot不是Linux類程序,沒有對應的raise()函數,所以報錯找不到。
網上的解決方法是:
三種:
1.去用其他對應的配置(估計是用于指定是非GUN/Linux類程序的),重新編譯一個新版本的交叉編譯器,然后用新的非GNU/Linux的交叉編譯器,去編譯此舊版本的uboot,即可正常編譯
2.修改自己的uboot,加上對應的(隨便寫個空的)__aeabi_ldiv0或raise函數即可。
3.修改cpu/arm920t/config.mk文件中的
PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8
-msoft-float
改為
PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8
參考:移植u_boot出現的問題
解決u_boot交叉編譯出錯
2013.11.19
重裝了gcc編譯器后,遇到使用除法的地方,出現如下錯誤:
/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2/libgcc.a(_dvmd_lnx.o): In function `__aeabi_ldiv0':
(.text+0x8): undefined reference to `raise'
參考點擊打開鏈接
點擊打開鏈接2
http://blog.csdn.net/yuanlu837/article/details/7958781
2013.11.20
解決之道:
在鏈接時鏈接libgcc.a
LDFLAGS += -L $(shell dirname `$(CC) -print-libgcc-file-name`) -lgcc
同時也要在代碼中加上raise函數,應該是除數為0時會進這個函數:
int raise(int signum)
{
return 0;
}
(在main.c文件中加上這個函數)
參考http://blog.csdn.net/jijiagang/article/details/8983133
雖然編譯連接能通過,但除法還是沒有作用(當被除數是變量時)。
上一篇:ARM學習筆記020之_asm_、CPSR、SPSR、位置無關碼等問題
下一篇:ARM學習筆記001之arm-linux-gcc 4.3.2下載與安裝
推薦閱讀
史海拾趣
2015年,HCC Industries迎來了其發展歷程中的一個重要轉折點。在這一年,公司成功收購了另一家具有強大研發實力和市場份額的微電子企業。此次并購不僅使HCC在技術上得到了進一步的補充和提升,還大大增強了其生產能力和市場覆蓋范圍。通過整合雙方資源,HCC在短時間內實現了規模的快速擴張和效益的顯著提升,進一步鞏固了其在行業內的領先地位。
在競爭激烈的電子行業中,品質是企業生存和發展的關鍵。Amecon Magnetics公司始終將品質管理放在首位,建立了嚴格的質量管理體系,確保從原材料采購到產品出廠的每一個環節都符合高標準的質量要求。這種對品質的執著追求使得公司的產品贏得了客戶的廣泛好評和信賴,為公司樹立了良好的品牌形象。
為了保持技術的領先地位,Delock公司非常重視與高校、研究機構的研發合作。公司先后與多所知名大學和研究機構建立了緊密的合作關系,共同開展電子連接技術的研發和創新。這些合作不僅為Delock公司帶來了源源不斷的技術創新成果,也為公司培養了一批高素質的研發人才。通過與高校、研究機構的緊密合作,Delock公司在電子連接技術領域始終保持領先地位。
近年來,電子行業面臨著技術升級、市場變革等多重挑戰。AMICC積極應對這些挑戰,不斷調整戰略和業務模式。公司加大了對新興技術的研發投入,加快了產品更新換代的速度。同時,AMICC還加強了與產業鏈上下游企業的合作,共同應對市場變化。這些措施使AMICC在行業中保持了領先地位,實現了持續穩健的發展。
“精工半導體”是另一家值得一提的Discrete Semiconductor Industries公司。該公司自創立之初就堅持以品質為核心,對每一個生產環節都進行嚴格的質量控制。通過引進先進的生產設備和技術,精工半導體不斷提高產品的可靠性和穩定性。同時,公司還建立了完善的售后服務體系,確保客戶在使用過程中能夠得到及時的技術支持和解決方案。正是憑借這種對品質的執著追求,精工半導體逐漸樹立了良好的品牌形象,贏得了市場的廣泛認可。
隨著技術的不斷成熟和產品的不斷完善,AiT公司開始積極拓展市場。他們通過參加國際電子展會、與國內外知名企業建立合作關系等方式,不斷提升品牌知名度和市場份額。同時,公司還針對不同行業和領域的需求,推出了定制化的半導體解決方案,進一步擴大了應用范圍。這一系列的舉措使得AiT公司在市場中實現了跨越式發展。
多年來,人們一直預測低壓差線性調整器(LDO)要退出在汽車領域的應用。但是,LDO調整器持續生存著甚至茁壯成長,因為它們的價格便宜且使用方便。本文中,我將闡述LDO調整器的復雜性,考察市場上的最新進展(確實有一些進展),并分析隨著汽車電源需求 ...… 查看全部問答∨ |
比較落伍,周末才開始下載了大名鼎鼎的《蝸居》看。由于沒時間,也只看了一集,對于買房難還沒什么體會,可海藻找工作時,她姐姐海萍對她的教導讓我這個過來人感覺真對啊。 具體的記不清楚了,大概是: & ...… 查看全部問答∨ |
大家新年快樂! 我的平臺是pxa270+wince5.0. 現在鍵盤驅動遇到了一點小問題,請大家幫幫忙。 通常鍵盤上,shift+3應該是顯示#號,但是我目前要做的shift+3要顯示歐元符號,#被移到其他按鍵上去了。 我修改了鍵盤的影射結構,將原來#的位置用歐 ...… 查看全部問答∨ |
|
本人剛進公司,被分到做vxworks軟件,原來沒有接觸過vxworks,所以也不是很了解,請各位幫忙講解一下,主要是vxworks是做什么的,它的應用平臺,當前形勢,以及怎么去學,主要按那個方向去學習,如果將來想跳槽應該跳哪個方向的,謝謝哈^-^… 查看全部問答∨ |
|
在CCS4下新建Piccolo TMS320F28027怎么始終有錯誤不能進入DEBUG下 用自帶的例子是可以進入DEBUG,可是自己新建的就是有錯誤,請熟悉CCS4的進來講講那里設置要重點設置的?… 查看全部問答∨ |
zinc6.1下,定義一個 zafstring *testString = new zafString();然后把testString 加到窗口中 ,在該 控件中輸入數據,比如 12345,用程序獲得該值 testString ->Text()為什么只能得到“1”,而不能得到整個字符串呢?有遇 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 下載白皮書 答題贏好禮|TE《智能監控應用連接解決方案指南》
- 贏京東卡 室內空氣隱患大作戰——英飛凌XENSIV™PAS CO2傳感器
- 下載汽車電氣化精品文章,贏【體脂秤、羅技鼠標、手持風扇】,開啟MPS汽車技術進階之旅!
- CadenceLIVE China 2022中國線上用戶大會 報名中!
- 免費測評|ESP32-S2-Kaluga-1新型多媒體開發板,靈活拆裝,滿足多種需求
- 【有獎下載】英飛凌《時尚小家電功率器選型指南》,詳解兼具強大功能與潮流款式的小家電設計!
- 有獎直播 | 微軟 Azure Sphere助力穩定,安全和靈活的物聯網解決方案
- ADI軟件定義無線電(SDR)專題文章
- 富士通白皮書有獎下載|FRAM高性能存儲器優化車載電子系統