我应该如何在c文件中包含用extern定义的变量
How should I include variable defined with extern in c file
我在使用 arm-none-eabi
工具链编译 STM32F4-Discovery 的演示代码时遇到问题。链接时出现错误,这是我收到的 [第一个] 错误。
template/obj/stm32f4xx_it.o: In function `OTG_FS_IRQHandler':
template/src/stm32f4xx_it.c:192: undefined reference to `hpcd'
几个月来我一直在尝试解决这个问题,所以我创建了 this github 存储库来跟踪项目。变量 hpcd
在 template/src/usbd_conf.c
中定义。不幸的是,我对 C/C++ 的了解充满了漏洞,所以我希望有人可以帮助我缩小问题范围并建议正确的解决方法。
我有两个问题。
hpcd
包含在文件 usbd_conf.c
中。它在许多文件中使用,但这些文件中 none 个实际上包含 usbd_conf.c
个,只有 usbd_conf.h
个。问题是,仅包含 header,一个将变量声明为 extern PCD_HandleTypeDef hpcd;
的文件是否可以在不具体包含 .c
文件的情况下使用该变量?
- 假设问题 1 的答案是肯定的,为什么函数
OTG_FS_IRQHandler
找不到 hpcd
?来自 stm32f4xx_it
的包含链是 main.h -> usbd_core.h -> usbd_conf.h
.
我假设问题 1 的答案是肯定的,因为我相信这是我购买时板上 运行 的演示代码。我只能假设问题出在我构建它的方式上。有人愿意帮我解决这个问题吗?如果相关或为了更好地构建这个问题,我很乐意提供更多细节,但我试图避免在我的问题中发布完整的 USB 堆栈。谢谢。
如果您将 extern PCD_HandleTypeDef hpcd;
放在每个相关人员都包含的 header 之一中可能会有所帮助(我认为 main.h
就可以)。
extern
东西如何正常工作的示例:
确实定义了您要在别处使用的变量的文件包含
include "a_header.h";
// ...
int some_variable = 42;
headera_header.h
包含
extern some_variable;
您要在其中使用该变量的文件包含
include "a_header.h";
extern some_variable;
//...
foo = some_variable;
some_variable = 47;
以便链接器确切地知道如何处理它。
我在使用 arm-none-eabi
工具链编译 STM32F4-Discovery 的演示代码时遇到问题。链接时出现错误,这是我收到的 [第一个] 错误。
template/obj/stm32f4xx_it.o: In function `OTG_FS_IRQHandler':
template/src/stm32f4xx_it.c:192: undefined reference to `hpcd'
几个月来我一直在尝试解决这个问题,所以我创建了 this github 存储库来跟踪项目。变量 hpcd
在 template/src/usbd_conf.c
中定义。不幸的是,我对 C/C++ 的了解充满了漏洞,所以我希望有人可以帮助我缩小问题范围并建议正确的解决方法。
我有两个问题。
hpcd
包含在文件usbd_conf.c
中。它在许多文件中使用,但这些文件中 none 个实际上包含usbd_conf.c
个,只有usbd_conf.h
个。问题是,仅包含 header,一个将变量声明为extern PCD_HandleTypeDef hpcd;
的文件是否可以在不具体包含.c
文件的情况下使用该变量?- 假设问题 1 的答案是肯定的,为什么函数
OTG_FS_IRQHandler
找不到hpcd
?来自stm32f4xx_it
的包含链是main.h -> usbd_core.h -> usbd_conf.h
.
我假设问题 1 的答案是肯定的,因为我相信这是我购买时板上 运行 的演示代码。我只能假设问题出在我构建它的方式上。有人愿意帮我解决这个问题吗?如果相关或为了更好地构建这个问题,我很乐意提供更多细节,但我试图避免在我的问题中发布完整的 USB 堆栈。谢谢。
如果您将 extern PCD_HandleTypeDef hpcd;
放在每个相关人员都包含的 header 之一中可能会有所帮助(我认为 main.h
就可以)。
extern
东西如何正常工作的示例:
确实定义了您要在别处使用的变量的文件包含
include "a_header.h";
// ...
int some_variable = 42;
headera_header.h
包含
extern some_variable;
您要在其中使用该变量的文件包含
include "a_header.h";
extern some_variable;
//...
foo = some_variable;
some_variable = 47;
以便链接器确切地知道如何处理它。