如何在 Android NDK 中使用 memset_s?

How to use memset_s in Android NDK?

android.ndk {
        moduleName = "hello-jni"
        stl = "stlport_static"
        CFlags.add("-std=iso9899:2011") // I have also used "-std=c11"
        ldLibs.addAll(["android", "log"])
    }

我在 jni C 代码中仍然看不到 memset_s。它说未定义的引用。

在我的 C 代码中,我还包含了 string.h、stdlib.h、stdio.h 以及

#define STDC_WANT_LIB_EXT1 1

仍然无法摆脱未定义引用错误。

如果我添加标志 Allow_Undefined_symbols 它会编译,但是当我调用函数 memset_s 它会崩溃。

我想请教的问题如下:

1) C11 memset_s api 在Android NDK 工具链中的哪个可以得到?

2) 我的另一个问题是如何在最新的 android studio 中使用实验性 gradle alpha5 更改 android 的默认工具链?

C11 标准中 "Annex K" 的这个功能是可选的。它没有在许多 C 库中实现。

您可以通过宏 __STDC_LIB_EXT1__.

测试是否符合 Annex K

我找不到任何支持 NDK 的 C11 的工具链。所以我使用了以下 link:

中的 c99 兼容解决方案

https://www.securecoding.cert.org/confluence/display/c/MSC06-C.+Beware+of+compiler+optimizations

您可以根据自己的目的自定义。我正在为任何有需要的人添加此解决方案。