封存into 发表于 2025-7-24 11:26

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

本帖最后由 封存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 的混合编译,挺想知道结果!
页: [1]
查看完整版本: 在静态C++库中包含stm32f1xx_hal.h无效。