linux gcc链接器C程序的问题

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

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  #include "tmp1.h" int main() { printf("hello world\n"); } 

问题是你正在初始化头文件中的变量,所以你得到重复的符号。 您需要使用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}; 

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

将extern设为xxx并在.c文件中定义xxx。