【发布时间】:2018-05-21 06:28:06
【问题描述】:
我的 linux 桌面上有一些交叉编译器。有些使用 glibc,有些使用 uclibc(将来可能还有其他 libcs)。
目前,我可以进入他们的 sysroot 目录并搜索 libc.so 并尝试找到它指向的文件名(例如,libc.so -> libuClibc-1.0.12.so)然后我获取他们的名称。但如果命名发生变化或交叉编译器本身发生变化,这不会持续很长时间。
是否有更好/可靠的编程方式来检测目标交叉编译器使用的libc 的名称和版本?或者是否有任何自省工具可用于获取有关目标 ceros 的详细信息
注意:这里有几个类似的问题,通常指向#include <features.h> 文件或类似文件。如果生成的代码也可以在主机上运行,那效果很好。但不适合交叉编译环境。
那么有没有人能够更可靠地检测到?
编辑:如果有人来这里专门寻找检测 musl libc,我在与此问题相关的 SO 上 answered another question。
【问题讨论】:
-
您可以检查预处理器宏。例如,
gcc -dM -E - <<< "#include <features.h>" | grep -iE "(uclibc|glibc)"。 -
@DaBler 该解决方案唯一的小问题是:1)它同时显示了
glibc和uclibc用于 MIPS32-uclibc 交叉编译器,2)我必须解析输出。跨度>
标签: c