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

Linux - Feature Test Macros and Dynamic Linking

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

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

int strerror_r(int errnum, char buf, size_t buflen); / XSI-compliant */

char *strerror_r(int errnum, char buf, size_t buflen); / GNU-specific */

The XSI-compliant version of strerror_r() is provided if: (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE Otherwise, the GNU-specific version is provided.

假设我动态地 linking 我的应用程序与标准库,linker 如何正确 link 与函数的正确定义?

其中一个实际上称为 __xpg_strerror_r,如果需要,将重定向为用作 strerror_r,请参阅: https://code.woboq.org/userspace/glibc/string/string.h.html#409