如何确定 glibc (glibcxx) 二进制文件所依赖的版本?

发布于 2024-09-13 06:15:04 字数 419 浏览 10 评论 0原文

众所周知,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断肠人 2024-09-20 06:15:05

您可以尝试的一件事是在二进制文件上运行 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

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

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:

$ 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

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.

流云如水 2024-09-20 06:15:05
objdump -T  bin-file | grep -Eo 'GLIBC_\S+' | sort -u
objdump -T  bin-file | grep -Eo 'GLIBC_\S+' | sort -u
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文