Linux, 工作, 生活, 家人

Programming

KEIL uVersion Link Error

Compile 時最後碰到這個問題.

這是在 C 中去 Link C++ 的 Code 產生的.

[TEXT]
linking…
.\Obj\Memory.axf: Error: L6218E: Undefined symbol __aeabi_unwind_cpp_pr0 (referred from array_new.o).
.\Obj\Memory.axf: Error: L6218E: Undefined symbol __rt_new_handler_addr (referred from new.o).
.\Obj\Memory.axf: Error: L6218E: Undefined symbol abort (referred from arm_exceptions_terminate.o).
.\Obj\Memory.axf: Error: L6218E: Undefined symbol __rt_eh_globals_addr (referred from arm_exceptions_globs.o).
Target not created
[/TEXT]

解決方法就是 Option -> Target -> Use MicroLib 關掉.

如果要引入一些標準的 C Library, 也不能使用 MicroLib .
像是要初始化 Heap , _init_alloc 也是要關掉 MicroLib 的支援.

註:
當使用 malloc 時, 會去 heap 取得一塊 memory 給程式使用, 但是
Keil 本身並沒有 heap 的管理機制, 要指定一塊 memory 給 heap 用.
這時就要先 initial heap, 要使用 _init_alloc 這個 function 才可以 allocate .

Ref.
MicroLib

2 留言

  1. 主要是 C++ exception handling 預設參數不匹配的緣故

  2. 文章作者的留言

    看起來不止, 連 malloc 也沒有.

發佈留言