在so库中使用相同名称定义的全局变量

时间:2014-09-19 14:55:04

标签: c linux shared-libraries

我想了解以下情况中的行为: -

//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(),会发生什么?

2 个答案:

答案 0 :(得分:2)

file1.c已定义

int a;

告诉编译器在该编译单元中为a分配内存,所有对a的引用都将由编译器解析(并且 not 链接器)。因此,file1会看到自己的afile1看到自己的a。如果您有,请使用

extern int a;

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

由于file2是共享对象,如果变量a应该由其他文件使用,那么file2.so可能会附带{{ 1}},这将有行

file2.h

然后extern int a; file2.h#include {/ 1}}。

答案 1 :(得分:0)

进行测试。很容易。

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