[STM32F1] 在静态C++库中包含stm32f1xx_hal.h无效。

[复制链接]
 楼主| 封存into 发表于 2025-7-24 11:26 | 显示全部楼层 |阅读模式
本帖最后由 封存into 于 2025-7-28 11:12 编辑


在静态C++库中包含stm32f1xx_hal.h无效。我正将stm32f1xx_hal.h导入我的静态C++库以访问标准类型和函数。
当项目还是C语言时可以正常工作,但迁移到C++后就不再识别这些类型了,尽管头文件包含并没有报错。
已经设置了包含保护宏和extern "C"声明:
#ifndef LTC6803LIBF103_HPP#define LTC6803LIBF103_HPP #ifdef __cplusplusextern "C" {#endif #include <stm32f1xx_hal.h> >>code<< #ifdef __cplusplus}#endif #endif
奇怪的是它似乎能和我其他一些库一起工作,不知道这个库出了什么问题
公羊子丹 发表于 2025-7-25 07:26 | 显示全部楼层
你这个 #ifdef __cplusplus 看着没啥毛病,确认下拼写是不是多了个 s?
周半梅 发表于 2025-7-25 07:27 | 显示全部楼层
有些 HAL 头文件里自己也带 extern "C",和你这个嵌套可能有冲突。
帛灿灿 发表于 2025-7-25 07:28 | 显示全部楼层
编译器报的错误具体是什么?有可能是链接阶段出问题而不是头文件。
童雨竹 发表于 2025-7-25 07:29 | 显示全部楼层
我遇到过类似,最后是在 cpp 文件里没加 extern "C",光头文件包住没用。
万图 发表于 2025-7-25 07:30 | 显示全部楼层
也可能是头文件顺序,先包含 HAL 后包含 C++ 库试试?
Wordsworth 发表于 2025-7-25 07:30 | 显示全部楼层
看看是不是有重复定义,或者别的头文件也带了 HAL,冲突了。
Bblythe 发表于 2025-7-25 07:31 | 显示全部楼层
有时候 IDE 配置也会影响,检查下 .c 和 .cpp 文件有没有被混用编译参数。
Pulitzer 发表于 2025-7-25 07:32 | 显示全部楼层
要是用的是模板类,extern "C" 也要包得很干净才行。
Uriah 发表于 2025-7-25 07:33 | 显示全部楼层
不行就把 HAL 包成单独的 C 文件,再用 C++ 调接口,这样最保险。
Clyde011 发表于 2025-7-25 07:34 | 显示全部楼层
有解决了记得回来更新下,我也在弄 F1 的混合编译,挺想知道结果!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

110

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

52

主题

110

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部