C 中未定义的 ARM 处理器库问题
Undefined ARM processor library issue in C
使用 DAVE 4.4.2(基于 Eclipse 的IDE)为英飞凌微控制器构建 C 程序我收到此错误:
'Building target: mcu.elf'
main.c:(.text.ERU0_3_IRQHandler+0x696): undefined reference to `arm_mat_init_f32'
'Invoking: ARM-GCC C Linker'
collect2.exe: error: ld returned 1 exit status
这是我的代码的简化概述。
#include <arm_math.h>
[other included libraries]
void my_function() {
arm_matrix_instance_f32 M;
float32_t zeros33[3][3] = {0};
arm_mat_init_f32( &M, 3, 3, &zeros33);
}
[other defined functions]
int main(void) {
my_function()
[other stuff]
}
而在 header arm_math.h
中,我看到函数的定义据说是未定义的。
void arm_mat_init_f32(
arm_matrix_instance_f32 * S,
uint16_t nRows,
uint16_t nColumns,
float32_t * pData);
我怀疑问题可能在于使用了不正确的数据类型,或者在传递参数时错误地使用了指针。我试图删除矩阵变量前面的&
,但没有成功。同样的思路,我也尝试过对矩阵数据的定义使用不同的数据类型:float32_t
和float
.
查看各种警告和信息消息,我注意到 arm_mat_init_f32
声明旁边有一个说 Expected 'float32_t *' but argument is of type 'float32_t (*)[3][3]'
。因此,我还尝试传递 "normal" 变量 float32_t zero = 0.0f
的地址,并且只传递 0.0f
。由于未定义的函数,它们仍然导致构建失败。
最后的观察是,如果我 right-click 在我的代码中调用函数,并询问 "go to Declaration",就会在正确的文件中找到正确的函数。
可能是什么问题?
使用 DAVE 时,解决问题的方法是通过 Project/Add 新 APP 添加 APP。然后selectSystem/CMSIS_DSP,再按"Add"。该程序需要完全重建。
这样,DAVE 配置了所有必要的环境变量和链接,以便包含 arm_math
库。
使用 DAVE 4.4.2(基于 Eclipse 的IDE)为英飞凌微控制器构建 C 程序我收到此错误:
'Building target: mcu.elf'
main.c:(.text.ERU0_3_IRQHandler+0x696): undefined reference to `arm_mat_init_f32'
'Invoking: ARM-GCC C Linker'
collect2.exe: error: ld returned 1 exit status
这是我的代码的简化概述。
#include <arm_math.h>
[other included libraries]
void my_function() {
arm_matrix_instance_f32 M;
float32_t zeros33[3][3] = {0};
arm_mat_init_f32( &M, 3, 3, &zeros33);
}
[other defined functions]
int main(void) {
my_function()
[other stuff]
}
而在 header arm_math.h
中,我看到函数的定义据说是未定义的。
void arm_mat_init_f32(
arm_matrix_instance_f32 * S,
uint16_t nRows,
uint16_t nColumns,
float32_t * pData);
我怀疑问题可能在于使用了不正确的数据类型,或者在传递参数时错误地使用了指针。我试图删除矩阵变量前面的&
,但没有成功。同样的思路,我也尝试过对矩阵数据的定义使用不同的数据类型:float32_t
和float
.
查看各种警告和信息消息,我注意到 arm_mat_init_f32
声明旁边有一个说 Expected 'float32_t *' but argument is of type 'float32_t (*)[3][3]'
。因此,我还尝试传递 "normal" 变量 float32_t zero = 0.0f
的地址,并且只传递 0.0f
。由于未定义的函数,它们仍然导致构建失败。
最后的观察是,如果我 right-click 在我的代码中调用函数,并询问 "go to Declaration",就会在正确的文件中找到正确的函数。
可能是什么问题?
使用 DAVE 时,解决问题的方法是通过 Project/Add 新 APP 添加 APP。然后selectSystem/CMSIS_DSP,再按"Add"。该程序需要完全重建。
这样,DAVE 配置了所有必要的环境变量和链接,以便包含 arm_math
库。