如何在 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
您可以根据自己的目的自定义。我正在为任何有需要的人添加此解决方案。
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__
.
我找不到任何支持 NDK 的 C11 的工具链。所以我使用了以下 link:
中的 c99 兼容解决方案https://www.securecoding.cert.org/confluence/display/c/MSC06-C.+Beware+of+compiler+optimizations
您可以根据自己的目的自定义。我正在为任何有需要的人添加此解决方案。