静态库 头文件中定义变量

aqiang_00 aqiang_00 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看到同事这么用了一个全局变量,结果编译连接时提示重复定义,有点不明白。大致如下:
//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__就不起作用了吗?

请高人指点迷津!谢谢!





...全文
评论 15
收藏 已收藏
分享
返回顶部
aqiang_00
Linux/Unix社区 23,224 成员 74,535 内容