gpt4 book ai didi

c - C中构建项目的问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:48 26 4
gpt4 key购买 nike

我正在用 C 语言做一个项目,但在构建它时遇到了问题。它是:

我的项目中有两个独立的子系统 [A 和 B],它们使用另一个子系统 [C] 的功能。为此,他们#include 必要的头文件。义务是两个子系统 [A 和 B] 都必须单独构建,我的意思是我有两个单独的子系统“Makefile”,我分别在每个子系统上运行“make”。

现在,当我尝试将我所有的子系统 [A,B,C] 合并到一个项目中时,gcc 告诉我已经声明了一些函数并且这些函数属于子系统 C。

我意识到头文件是在编译时包含的,即当我在子系统 [A 和 B] 上使用“make”时。所以,当我试图将它们全部统一起来时,它们实际上是在双重声明。

有人可以帮我解决这个问题吗?任何不需要我同时编译两个子系统 [A 和 B] 的解决方案都是好的。

最佳答案

嗯,这要么是编译错误,要么是链接器错误。

如果是编译时错误,您需要在 .h 文件中使用一些包含防护,如下所示:

#ifndef FILE_NAME_H#define FILE_NAME_H// file contents here#endif

这将阻止一个文件被多次包含。更改 FILE_NAME_H 以反射(reflect)文件名,以便每个包含保护都是唯一的。

如果是链接时错误,这通常发生在头文件中有函数体(即 {})时。因为多个文件将包含 header ,每个文件在目标代码中都有自己的定义,这将导致链接器冲突。

解决此问题的最佳方法是简单地确保所有函数体都放在 .c 文件中。如果它们足够短,您可以尝试 __inline__ 它们,但不能保证编译器会听您的。

关于c - C中构建项目的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855290/

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