首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查libc版本?

如何检查libc版本?
EN

Stack Overflow用户
提问于 2020-07-04 17:42:40
回答 1查看 4.5K关注 0票数 2

这个问题与为什么帕克普过早回来?有关。我想了解一下在跨编译的可执行文件中使用了什么版本的libc 有一些限制,如下所述,使得检查glibc版本是否有特定的gcc编译器的答案不适用。

  • 检查libc版本的一种方法是使用在gnu/libc-version.h中声明的gnu_get_libc_version()函数。我的交叉工具链不包括libc-version.h
  • 另一个建议的解决方案是使用-print-file-name gcc选项。这个链接问题的答案对我来说没有用:
代码语言:javascript
复制
$ /path/to/toolchains/ARM-cortex-m3-4.4/bin/arm-uclinuxeabi-gcc -print-file-name=libc.so
libc.so
$
$ /path/to/toolchains/ARM-cortex-m3-4.4/bin/arm-uclinuxeabi-gcc -print-file-name=foo.bar
foo.bar
$ # I really do not have a foo.bar file in existence
  • 另一个建议的解决方案是只执行ldd --version。我的目标平台没有ldd
代码语言:javascript
复制
$ ldd
sh: can't execute 'ldd': No such file or directory
  • 另一个被提议的解决方案是查看__GLIBC____GLIBC_MINOR__ --但它们似乎也来自于libc-version.h,正如上面所述,libc-version.h并不存在于我的跨工具链中。

我的跨工具链似乎只提供libc.a,而不是libc.so

我试着通过libc.a通过/path/to/toolchains/ARM-cortex-m3-4.4/bin/arm-uclinuxeabi-nmstrings对“版本”和"libc“进行定位(不区分大小写),但是没有发现任何看起来像识别版本的东西。

我最后一次尝试的是strings /path/to/toolchains/ARM-cortex-m3-4.4/bin/arm-uclinuxeabi-gcc | grep GLIBC,它给了我:

代码语言:javascript
复制
GLIBC_2.3
GLIBC_2.2
GLIBC_2.1
GLIBC_2.0
EGLIBC configuration specifier, serves multilib purposes.

但是这个解决方案并没有得到很高的支持,而且它也有一个评论,暗示它并没有给你真正的版本。我不太明白这个答案或它的回应,所以我不知道如何解释它的有效性。

问题:鉴于以上所述,是否有确定用于跨平台交叉编译的libc版本的确定方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 18:13:22

您可能正在处理libc的变体,而不是glibc。libc有多个不同实现,例如musl或uclibc。

这里有一个Bash脚本,它可以检测编译器是使用glibc还是uclibc,如果它检测到了,就告诉您版本。

代码语言:javascript
复制
GCC_FEATURES=$(gcc -dM -E - <<< "#include <features.h>")

if grep -q __UCLIBC__ <<< "${GCC_FEATURES}"; then
    echo "uClibc"
    grep "#define __UCLIBC_MAJOR__" <<< "${GCC_FEATURES}"
    grep "#define __UCLIBC_MINOR__" <<< "${GCC_FEATURES}"
    grep "#define __UCLIBC_SUBLEVEL__" <<< "${GCC_FEATURES}"
elif grep -q __GLIBC__ <<< "${GCC_FEATURES}"; then
    echo "glibc"
    grep "#define __GLIBC__" <<< "${GCC_FEATURES}"
    grep "#define __GLIBC_MINOR__" <<< "${GCC_FEATURES}"
else
    echo "something else"
fi

(来源.)

如果您正在使用musl,不幸的是,这个脚本会报告“其他东西”。没有办法用预处理宏和这是故意的来检测musl。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62732447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档