静态库 头文件中定义变量
看到同事这么用了一个全局变量,结果编译连接时提示重复定义,有点不明白。大致如下:
//test.h
#ifndef __TEST_H__
#define __TEST_H__
...
int test_a = 0;
...
#endif
//test.c
#include "test.h"
....
test.c 被编成功地译成一个静态库libtest.a
//main.c
#include "test.h"
int main(int argc,char*argv[])
{
.....
return 0;
}
编译main.c时把libtest.a链接进来,链接时报错说test_a被重复定义!!
我不明白的是:test.h已经有了#ifndef __TEST_H__,应该不会被重复应用了,为什么还会出现重复定义呢??当然没有静态库时,直接把test.c编译成test.o,把main.c编译成main.o,然后链接成可执行文件,这样是完全正确的(尽管不提倡头文件中定义变量)。我认为,之所以说重复定义,应该是说main.c中#include "test.h"时test_a被定义,然后连接libtest.a时libtest.a中test_a也被定义。但libtest.a中#ifndef __TEST_H__就不起作用了吗?
请高人指点迷津!谢谢!