我在纯C-st usb库中有一个项目,我需要将其迁移到c++并将相同的结构更改为类。我删除了所有c++“保护”,例如:
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
我将所有文件扩展名从
.c
更改为.cpp
(HAL库除外)。我意识到c++
.hex
比c .hex
小7kB。当我查看.map
文件时,我发现缺少许多功能。我以为是static
函数引起的,但是删除static
关键字没有帮助。有谁知道导致某些函数未编译的原因。当扩展名是.c
时,一切都很好。 最佳答案
C++函数的签名不同于C函数。由于您失去了功能并且代码更小了,因此可能需要C链接的函数可能已被编译为C++,并且签名不匹配阻止了正确的链接。
发生这种情况的可能位置是在中断 vector 表中。如果处理程序函数是使用C++链接编译的,则处理程序地址不会使其进入使用C编译的表中。
仔细检查中断 vector ,并确保它们引用正确的功能。如果正确,请检查使用C编译的其他任何代码,这些代码可能引用使用C++编译的外部符号。