gpt4 book ai didi

android - 如何为 android 正确使用 strerror_r()

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:43 29 4
gpt4 key购买 nike

Android ndk-9c 似乎与 strerror_r 声明的标准相矛盾。

Linux 手册页显示 strerror_r 声明如下:

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

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

(来自:http://linux.die.net/man/3/strerror_r)

从下面的帖子中我了解到没有正确的方法来取消定义 _GNU_SOURCE pragma,(_GNU_SOURCE 似乎是在内部定义的,即使我以某种方式设法取消定义它我也会得到其他类型的错误。)这通常会强制我使用特定于 GNU 的版本。

why-is-gnu-source-defined-by-default-and-how-to-turn-it-off

问题是在android-ndk(版本9c)中strerror_r定义如下

extern int    strerror_r(int errnum, char *buf, size_t n);

(来自:android-ndk-r9c\platforms\android-19\arch-arm\usr\include\string.h 行:67)

因此,即使 android ndk 定义了 _GNU_SOURCE,strerror_r 的声明也与其相矛盾。所以在我开始介绍类似

的东西之前
if (defined(_GNU_SOURCE) && !defined(ANDROID))

对于我们的跨平台项目,我想问问是否有更好的方法可以让我在不触及代码的情况下修复它。(也许 android 中的其他一些开关会使 strerror_r 行为等.)

最佳答案

为了可移植性,假定标准行为(例如 XSI)并检查非标准平台(例如 GNU)

#if !defined(__GLIBC__)
// use the XSI standard behavior.
#else
// assume GNU exception
#endif

关于android - 如何为 android 正确使用 strerror_r(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32629222/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com