gpt4 book ai didi

我们可以用其他方式包含 C 源文件吗?

转载 作者:行者123 更新时间:2023-11-30 14:41:04 27 4
gpt4 key购买 nike

我正在 Cyclone V 上做一个裸机项目,现在我正在尝试用 C 语言制作一个裸机应用程序。但是,我在包含源文件时遇到了一些问题。

例如,我使用 alt_fpga_manager.h 中的函数 alt_fpga_state_get() 但它给了我错误消息

"undefined reference to 'atl_fpga_state_get()'

知道它需要一个包含该函数的源文件,我毫无问题地导入源文件。然而,在 alt_fpga_manager.c 中还出现了另一件事,它也给出了错误消息

"undefined reference to 'alt_clock_is_enable'

然后我必须导入 alt_clock_manager.h 的源文件,问题一直这样持续下去,直到我最终导入整个 src 文件夹。之后,所有“ undefined reference ”问题都得到了解决,但它又带来了另一个问题,告诉我我的 OCRAM 已溢出(我认为是因为添加了许多源文件)。

我想知道是否有任何解决方案,因为继续导入源文件不是一个方便的方法。我确实查看了一些示例,发现在他们的 makefile 中有这一行

HWLIBS_SRC  := alt_reset_manager.c alt_clock_manager.c alt_spi.c alt_globaltmr.c alt_timers.c alt_watchdog.c 

我认为这是他们包含源文件的方式,但我不确定。希望有人能给我一个解决这个问题的线索。

谢谢!

最佳答案

当您#include头文件时,您会得到函数声明(等等,具体取决于头文件内容),但定义它们,您错过了链接所需的对象或库文件

示例:

main.c 是

#include "f.h"

int main()
{
f();
}

f.h 为

extern void f();

f.c 是

void f() {}

如果我只考虑main.c:

/tmp % gcc main.c 
/tmp/ccFs7Gyz.o: In function `main':
main.c:(.text+0xa): undefined reference to `f'
collect2: ld returned 1 exit status

但也要考虑f.c:

/tmp % gcc main.c f.c

当然也可以分几步进行

/tmp % gcc -c f.c
/tmp % gcc main.c f.o

等等

附注不要#include源文件,因此mainc.c中没有#include "f.c"

关于我们可以用其他方式包含 C 源文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55158574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com