【问题标题】:gcc symbol resolution shadowinggcc 符号分辨率阴影
【发布时间】:2017-08-18 14:10:18
【问题描述】:

我正在尝试向我们的内部 libc 添加一些与 atexit 处理相关的自定义代码。

在我们的 libc 中我们定义了这个,因为我们链接到自定义 CRT 文件并且不使用定义这个的 GCC。

void *__dso_handle __attribute__((__visibility__("hidden"),__weak__)) = &__dso_handle;

GCC 在链接二进制文件时也会将此添加到二进制文件中。

在 libc 中是刚刚调用的函数 atexit

int atexit(void (*func)(void))
{
    return __cxa_atexit((void (*)(void*))func, NULL, __dso_handle);
}

我面临的问题是使用的 _dso_handle 值是来自 libc 的本地值,当我想让它从运行时调用 atexit() 的模块中动态获取一个值时,以便注册正确的 dso使用 atexit 函数。

我检查了属性,但没有发现任何有用的东西。

请注意,与 glibc 不同,atexit 保留在 libc 的动态版本中,以保持与旧二进制文件的向后兼容性。

【问题讨论】:

    标签: gcc linker libc crt atexit


    【解决方案1】:

    我面临的问题是使用的 _dso_handle 值是来自 libc 的本地值,而我想让它动态地从运行时调用 atexit() 的模块中获取值

    您的模块可以改为调用__cxa_atexit,并传入您想要的任何dso_handle

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 2014-01-06
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2014-02-08
      相关资源
      最近更新 更多