Android ndk-9c似乎与strerror_r
声明的标准相矛盾。
Linux man页面将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 */
(from: http://linux.die.net/man/3/strerror_r)
我了解到从以下帖子中,似乎没有适当的方法来取消定义_GNU_SOURCE编译指令,(_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))
针对我们的跨平台项目,我想问是否有更好的方法让我在不触碰代码的情况下进行修复。(也许在安卓中有一些其他的开关可以使strerror_r
等函数正常工作。)