eclipse中編譯出現錯誤undefined reference to `_sbrk'


1. 在eclipse中使用gcc-arm-none-eabi-7-2017-q4-major-win32編譯代碼的時候出現了undefined reference to `_sbrk'

e:/proj_1/34_hauwei-baudio/gcc-arm-none-eabi-7-2017-q4-major-win32/bin/../lib/gcc/arm-none-eabi/7.2.1/
../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o): In function `_sbrk_r': sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk' collect2.exe: error: ld returned 1 exit status

2. 經過查找發現是底層的atof函數沒有實現,只有聲明

extern double atof(const char *nptr);

3. 添加上atof的函數原型,從百度搜了一個代碼加進去,問題解決

double atof(const char *s) { double power,value; int i=0; int sign=0; //assert(s!=NULL);//判斷字符串是否為空 //for(i=0;is_space(s[i]);i++);//除去字符串前的空格
    sign=(s[i]=='-')?-1:1; if(s[i]=='-'||s[i]=='+')//要是有符號位就前進一位
        i++; for(value=0.0;isdigit((int)s[i]);i++)//計算小數點前的數字
        value=value*10.0+(s[i]-'0'); if(s[i]=='.') i++; for(power=1.0;isdigit((int)s[i]);i++)//計算小數點后的數字
 { value=value*10.0+(s[i]-'0'); power*=10.0; } return sign*value/power; }

4. 解決過程,剛開始不太懂什么問題,以為是代碼整合有問題,重試了幾次,大致百度下,知道應該是上層應用調用了某個標准的C庫函數,但是底層缺少某個函數,但是一直沒搞明白是gcc-arm-none-eabi-的函數庫缺少這個函數,還是我的代碼缺少這個函數,只能去搜這幾個函數malloc,free,realloc,printf等函數,以為是缺少這幾個函數導致的,然后去搜索整個工程,發現好像沒啥問題。只能從其他方向着手

5. 關鍵這個錯誤提示太變態了,完全看不出導致是少了那個函數啊!然后去gcc-arm-none-eabi-的源代碼里面看了一下,sbrkr.c可惜沒找到這個C文件,有點懵逼,不懂什么幺蛾子,只能用笨辦法一個個C文件硬看,看是不是有啥詭異的函數,遇到覺得可能有毛病的地方都先改着試一試,直到看到這個atof這個函數,想起來以前需要添加這個函數來着,先查一下,是沒有原型,只有聲明,就先加上試試,然后就可以了

6. 總結起來,這個錯誤提示實在是無法聯想到缺少atof函數,這問題不好解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM