我正在尝试为大型框架实现回溯功能,该框架用于不同的平台和操作系统.在其中一些中,它与glibc相关联,而在另一个中,使用了不同的东西(例如uclibc).backtrace()函数仅存在于前者中.
有没有办法判断glibc是否被使用?任何#define?我无法在glibc手册中找到答案.我知道在编译期间我不能有链接时间信息,但我想包含文件必须有所不同.至少必须在某处声明回溯.我想检查它而不必强制将显式标志传递给编译器.
Eri*_*ler 33
包含features.h,它包含您需要的宏,例如
#define __GNU_LIBRARY__ 6
/* Major and minor version number of the GNU C library package. Use
these macros to test for features in specific releases. */
#define __GLIBC__ 2
#define __GLIBC_MINOR__ 4
Run Code Online (Sandbox Code Playgroud)
Gun*_*iez 24
有#defines __GNU_LIBRARY__, __GLIBC__ 和 在features.h中__GLIBC_MINOR__(我的系统中的6,2和11,glibc-2.11).
检查预处理器宏不是一个好的解决方案。uClibc 和可能的其他 libc 实现定义了宏来模仿 glibc(不提供其所有臃肿的功能),原因与所有浏览器在其用户代理字符串中包含“Mozilla”的原因大致相同:希望看到 glibc 并关闭很多的损坏程序如果他们没有看到它的功能。
相反,您应该编写一个配置脚本来探测backtrace并仅在它可用时使用它。
| 归档时间: |
|
| 查看次数: |
11280 次 |
| 最近记录: |