如何引用静态库中声明的变量?

时间:2012-05-18 08:55:28

标签: c linux gcc x86-64 glibc

我正在尝试使用修改过的glibc库。 glibc库静态链接到我的代码。我已经在glibc库中声明了一个新变量(让我们称之为my_libc_var)。但是,当我尝试在我的程序中包含该变量时(使用extern关键字ofcourse),我得到undefined reference错误。我该如何解决这个问题?

在glibc中,变量声明如下。

int my_libc_var;

然而,在我的程序中,它声明如下。

extern int my_libc_var;

1 个答案:

答案 0 :(得分:1)

检查编译过程中您添加的变量是否包含在使用-fvisibility=hidden-fvisibility=internal等选项编译的源文件中。这将使您的符号不能从其他模块引用。

只要您使用gcc,就可以使用以下任一方式获得类似的行为:

#pragma GCC visibility push("hidden")

可以放在源文件的开头,或者:

int var __attribute__ ((visibility ("hidden")));

在符号的定义中(显然你没有放置,但我把它放在这里以完成我的回答)。

有关详细信息,请参阅gcc attribute overview page