Linux - 功能测试宏和动态链接

Posted

技术标签:

【中文标题】Linux - 功能测试宏和动态链接【英文标题】:Linux - Feature Test Macros and Dynamic Linking 【发布时间】:2021-04-06 17:54:01 【问题描述】:

C 标准库包含一个方法 strerror_r (https://linux.die.net/man/3/strerror_r)。

根据编译时定义的“功能测试宏”,以及与 GNU 标准头文件的对比,包含两个定义之一:

int strerror_r(int errnum, char buf, size_t buflen); / XSI 兼容 */

char *strerror_r(int errnum, char buf, size_t buflen); / GNU 特定 */

在以下情况下提供符合 XSI 的 strerror_r() 版本: (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)&& ! _GNU_SOURCE 否则,将提供特定于 GNU 的版本。

假设我动态链接我的应用程序与标准库,链接器如何正确链接与函数的正确定义?

【问题讨论】:

【参考方案1】:

其中一个实际上称为__xpg_strerror_r,并在需要时被重定向为strerror_r,请参阅: https://code.woboq.org/userspace/glibc/string/string.h.html#409

【讨论】:

好的。这就说得通了。我知道链接器不知道返回类型(甚至参数类型),所以我想知道是否存在某种“元”魔法。但是定义具有不同名称的方法很有意义。谢谢。

以上是关于Linux - 功能测试宏和动态链接的主要内容,如果未能解决你的问题,请参考以下文章

linux4 动态链接与静态链接

Linux下的.so文件是动态链接库

Linux 动态链接库包含静态链接库的方法

制作静态动态链接库

Linux动态链接库的使用

Linux动态链接和静态链接简析