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
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