2009-11-11 53 views
2

我想编译一个包含头文件到.c文件的c程序。 但只有1个.c文件真正使用头文件中定义的变量。 这里是一些将生成链接器问题的示例代码。 我想让我的头文件包含全局变量,这些全局变量由2个不同的.c文件使用......任何类型的帮助将不胜感激。谢谢。C程序的linux gcc链接程序问题

tmp1.h文件

#ifndef TMP1_H_1 
#define TMP1_H_1 

double xxx[3] = {1.0,2.0,3.0}; 

#endif 

tmp1.c文件

#include "tmp1.h" 

void testing() 
{ 
    int x = 0; 
    x++; 
    xxx[1] = 8.0; 
} 

main1.c文件

#include <stdio.h> 
#include "tmp1.h" 

int main() 
{ 
printf("hello world\n"); 
} 
+0

通常,在问题中包含什么错误实际上是个好主意。 – sth 2009-11-12 00:04:33

+2

这将是臭名昭着的“C1234:不要在头文件中定义数据,你的鹅”错误消息:-) – paxdiablo 2009-11-12 00:10:52

回答

5

问题是你在头文件中初始化变量,所以你会得到重复的符号。您需要用extern关键字声明double xxx,然后在.c文件中初始化它。

像这样:

#ifndef TMP1_H_1 
#define TMP1_H_1 

extern double xxx[3]; 

#endif 

然后在.c文件之一:

double xxx[3] = {1.0,2.0,3.0}; 
+0

+1,但我想指出,根本不需要extern,如果“只有一个.c文件实际上使用了已定义的变量“ - 只需在该c文件中声明,定义和使用它即可。 – paxdiablo 2009-11-12 00:12:19

+0

是的。事实上,假设OP的实际代码并不比发布的代码复杂,那么根本不需要第二个.c文件甚至包含头文件。 – 2009-11-12 00:16:40

1

不要将头文件中的代码,它是“乘法定义符号”配方链接器错误。在头文件中放入一个extern引用到你的全局变量中,然后在你的一个C文件(甚至是新文件)中定义实际的全局变量。

0

把外部的xxx放在.c文件中并将xxx定义。