【问题标题】:How to determine version of glibc (glibcxx) binary will depend on?如何确定 glibc (glibcxx) 二进制文件的版本将取决于?
【发布时间】:2011-03-27 01:07:29
【问题描述】:

众所周知,glibc(据我所知,glibstd++ 也是)使用符号版本控制机制。 (详情参考:How can I link to a specific glibc version。)

问题是如何确定 GLIBC 和 GLIBCXX 的确切版本将由链接器为来自 libc 和 libstdc++ 的名称选择?例如,如何得到这样的东西:

time -> time@GLIBC_2_5
...
gethostbyname -> gethostbyname@GLIBC_2_3

为什么我们需要这个?在我看来,如果您想最小化所需的 glibc/libstdc++ 版本,它会很有用。

【问题讨论】:

标签: linux glibc libstdc++


【解决方案1】:

您可以尝试的一件事是在您的二进制文件上运行 objdump -T

如果您正在考虑链接到旧版本的符号,请注意这些旧版本也可能依赖于旧的、不同的结构或其他定义。为避免这种情况,请编译和链接旧的匹配头文件和库。

【讨论】:

  • 谢谢,吉尔斯。有用。还有一个问题,如何在代码中获取调用动态符号的位置?我的意思是,例如,如果 'objdump -T' 返回一些条目,比如 GLIBCXX_3.4.9 Insert_,如何理解源代码中的哪些函数使用这个符号?
  • 嗯,我真的不知道比在所有 .o 文件上运行 objdump -t 并检查哪些文件包含对该函数的引用更好的解决方案。似乎这可以做得更好,因为链接器知道在哪里使用了未解析的符号。
  • 我只想补充一点,对于共享库,“objdump -T”不起作用,我正在使用@987654321 上描述的解决方案“ldd -v somelibrary.so”(-v 很重要) @
猜你喜欢
  • 2019-11-08
  • 1970-01-01
  • 2013-06-13
  • 2017-10-07
  • 2011-05-07
  • 2015-12-21
  • 2011-02-12
  • 2016-05-06
相关资源
最近更新 更多