在C中构建项目的问题

时间:2009-12-06 12:39:00

标签: c project-management

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

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

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

我意识到头文件包含在编译时,即当我在子系统[A和B]上使用'make'时。因此,当我试图将所有这些联合起来时,它们实际上是双重声明的。

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

3 个答案:

答案 0 :(得分:3)

这是编译错误或链接器错误。

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

#ifndef FILE_NAME_H
#define FILE_NAME_H

// file contents here

#endif

这将停止多次包含文件。更改FILE_NAME_H以反映文件名,以便每个包含后卫都是唯一的。

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

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

答案 1 :(得分:0)

您可以使用#ifndef ..来避免双重包含头文件

#ifndef <some name identifying the header file>
#define <some name identifying the header file>
//
//

// header file content will go here 

//

// 
#endif

答案 2 :(得分:0)

您的C头文件是仅包含声明还是实现?

如果它包含实现,那么你应该将其取出并单独编译。