如何确定 glibc (glibcxx) 二进制文件所依赖的版本?
众所周知,glibc(据我所知,glibstd++ 也)使用符号版本控制机制。 (有关详细信息,请参阅:如何链接到特定的 glibc版本。)
问题是如何确定链接器为 libc 和 libstdc++ 中的名称选择的 GLIBC 和 GLIBCXX 的确切版本?例如,如何得到这样的东西:
time -> time@GLIBC_2_5
...
gethostbyname -> gethostbyname@GLIBC_2_3
为什么我们需要这个?在我看来,如果您想最小化所需的 glibc/libstdc++ 版本,它会很有用。
It's well known that glibc (and, as far as I know, glibstd++ also) uses symbol versioning mechanism. (For the details refer: How can I link to a specific glibc version.)
The question is how to determine exact versions of GLIBC and GLIBCXX will be chosen by linker for names from libc and libstdc++? For example, how to get something like this:
time -> time@GLIBC_2_5
...
gethostbyname -> gethostbyname@GLIBC_2_3
Why do we need this? It seems to me that it can be useful if you want to minimize required versions of glibc/libstdc++.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以尝试的一件事是在二进制文件上运行 objdump -T 。例如,以下是如何查看我的系统上的
/usr/sbin/nordvpnd
二进制文件依赖于 GLIBC 版本至少 2.18:如果您正在考虑链接到旧版本的符号,请注意这些旧版本版本也可能依赖于旧的、不同的结构或其他定义。为了避免这种情况,请使用较旧的匹配头文件和库进行编译和链接。
One thing you can try is running
objdump -T
on your binary. For example, here's how to see that the/usr/sbin/nordvpnd
binary on my system depends on GLIBC version at least 2.18:If you are considering linking to older versions of symbols, be aware that these older versions may depend on older, different structures or other definitions as well. To avoid this, compile and link with older, matching header files and libraries.