現象:
在用GCC編譯嵌入式MCU程序時,由於使用了第三方的庫,出現了類似undefined reference to `_sbrk', `_write', `_lseek', `_read'的連接錯誤。
原因:
使用了類似printf,malloc,fopen,fread之類的庫函數,但是嵌入式MCU平台是不支持的。
解決辦法:
實現相應的庫函數或者去掉。
實際上,遇到這類問題的人往往是嘗試修改了部分的函數調用,但是還是報類似的錯誤,那么原因就是沒有修改完全,一般的庫函數包括printf,malloc,realloc一類,fopen,fread一類等。值得注意的是我們往往會忽略fseeko函數,另外asset庫函數里面調用了fprintf函數要注意。
如何徹底確定所有函數被更換了呢,辦法就是使用arm-none-eabi-nm 查看xxx.a是否還包含這些函數,另外也可以查看libc.a(對應的a文件)進行對比。