MKD 報錯:
linking...
LCD.axf: Error: L6218E: Undefined symbol EnZK (referred from ht128x64.o).
LCD.axf: Error: L6218E: Undefined symbol GetFlashCnBuf (referred from ht128x64.o).
解析:Undefined symbol EnZK,翻譯過來就是:EnZK 這個符號沒有定義,隨後的小括號告訴你了,是在
ht128x64.o 這個文件裏面被提及的,這個.o文件在工程裏面並沒有,它是一個在編譯的時候根據.c/.s文件生成的。所以我們只需要找到工程裏面的.s或者.c即可,這裏對應這個名字的就是
ht128x64.c 了。
因爲ht128x64.c文件中調用了EnZK沒有定義,解決辦法:(1)在外部.c文件中定義EnZK;
(2) 把ht128x64.c文件中關於EnZK的部分註釋掉;
同理:引用自http://blog.sina.com.cn/s/blog_4d1854230101a0q0.html
led_blink.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f0xx.o).
此問題錯誤提示已經十分清楚的告訴你錯在哪裏了,Undefined symbol SystemInit ,翻譯過來就是:SystemInit 這個符號沒有定義,隨後的小括號告訴你了,是在
startup_stm32f0xx.o 這個文件裏面被提及的,這個.o文件在工程裏面並沒有,它是一個在編譯的時候根據.c/.s文件生成的。所以我們只需要找到工程裏面的.s或者.c即可,這裏對應這個名字的就是
startup_stm32f0xx.s了。
在此文件裏面可以找到SystemInit的所在:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
原來在復位中斷服務函數裏面,調用了SystemInit這個函數,而這個函數在.s文件裏面沒有定義。
所以解決的辦法有兩個。
1,在外部(其他任何.c文件裏面)定義SystemInit這個函數,哪怕是個空函數也可以。
2,把
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
這三句話註釋掉。
SystemInit 是在使用main前做一些初始化工作,如果不需要官方的庫,只是自己編寫一些簡單的應用,則可以把此函數禁掉。譬如創建工程時直接加入s文件,剩下的自己簡單編程,此時就不要SystemInit。