linux - 如何确定 glibc (glibcxx) 二进制将依赖的版本?

标签 linux glibc libstdc++

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

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

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

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

最佳答案

您可以尝试的一件事是在您的二进制文件上运行 objdump -T。例如,以下是如何查看我系统上的 /usr/sbin/nordvpnd 二进制文件至少依赖于 GLIBC 版本 2.18:

$ objdump -T /usr/sbin/nordvpnd | grep GLIBC | sed 's/.*GLIBC_\([.0-9]*\).*/\1/g' | sort -Vu      
2.2.5
2.3
2.3.2
2.3.3
2.3.4
2.4
2.7
2.8
2.9
2.10
2.14
2.15
2.16
2.17
2.18

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

关于linux - 如何确定 glibc (glibcxx) 二进制将依赖的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436008/

相关文章:

linux - 为什么我不能直接比较2个线程ID而不是使用pthread_equal?

linux - 让 Inotify 正确发出 IN_UNMOUNT 事件

Linux - 迁移和切换之间的区别?

c - 如何将 readlink 与动态内存分配一起使用

c++ - 如何获得涉及 C++ 标准库的帧指针 perf 调用堆栈/火焰图?

Linux 上的 Python 版本

glibc - *** 检测到 glibc ***/usr/sbin/apache2 : free(): invalid pointer

c - 如何在 Ubuntu 中修改 glibc 来改变 printf() 函数的结果

c++ - 如何用 vstring 替换 std::string?

linux - 如果我已经安装了 GLIBCXX_4.1.2,是否需要 GLIBCXX_3.4.9?