【问题标题】:How to refer to a variable declared inside a static library?如何引用静态库中声明的变量?
【发布时间】:2012-05-25 20:20:40
【问题描述】:

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

在glibc中,变量声明如下。

int my_libc_var;

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

extern int my_libc_var;

【问题讨论】:

  • 请告诉我们你是如何声明你的变量的。
  • 现在编辑以显示它是如何声明的。
  • 您确定要链接到修改后的 glibc 吗?可以粘贴编译结果吗?
  • 请说明您是如何调用链接器的。

标签: c linux gcc x86-64 glibc


【解决方案1】:

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

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

#pragma GCC visibility push("hidden")

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

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

在符号的定义中(显然你没有放,但我放在这里是为了完成我的答案)。

更多信息,您可以参考gcc attribute overview page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多