首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在so库中定义了同名的全局变量

在so库中定义了同名的全局变量
EN

Stack Overflow用户
提问于 2014-09-19 22:55:04
回答 2查看 995关注 0票数 5

我想知道以下场景中的行为:

代码语言:javascript
复制
//file1.c : Main file of a user-space process,say Process X.
int a; //GLobal variable in file1.c
func(); //Library function

//file2.c :Part of .so used by Process X.
int a;
void func()
{
    a=0;//Access variable a.
}

如果进程X调用库的函数func(),会发生什么?

EN

回答 2

Stack Overflow用户

发布于 2014-09-19 23:18:21

file1.c中,您定义了

代码语言:javascript
复制
int a;

它告诉编译器在编译单元中为a分配内存,对a的所有引用都将由编译器(而不是链接器)在那里解析。所以file1看到了自己的afile1看到了自己的a。如果您使用了,请使用

代码语言:javascript
复制
extern int a;

file1中,编译器会将此符号的解析推迟到链接器,然后在file2.c外部解析a

因为file2是一个共享对象,所以如果假设变量a被其他文件使用,那么file2.so可能会附带一个file2.h,它将包含下面的代码行

代码语言:javascript
复制
extern int a;

这个file2.h就是file1.c中的#included。

票数 2
EN

Stack Overflow用户

发布于 2014-09-19 22:59:19

做个测试。这么简单。

file2中的a与func链接,因此file1中的a不会受到影响。它们是不同的两个变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25936790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档