我在纯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++编译的外部符号。

09-11 18:56