Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓ndk可以';找不到atof函数_Android_Android Ndk - Fatal编程技术网

Android 安卓ndk可以';找不到atof函数

Android 安卓ndk可以';找不到atof函数,android,android-ndk,Android,Android Ndk,我试图在我的Android项目中使用开源C库。此库使用atof()函数。我知道atof()是标准C库(stdlib.h)中定义的函数。因此,它应该在Android NDK(仿生库)上的标准C库中实现 但是,当我尝试加载包含此函数调用的库时,我收到一个运行时错误: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 86 cannot locate 'atof'.... 我是使用NDK进行And

我试图在我的Android项目中使用开源C库。此库使用
atof()
函数。我知道
atof()
是标准C库(stdlib.h)中定义的函数。因此,它应该在Android NDK(仿生库)上的标准C库中实现

但是,当我尝试加载包含此函数调用的库时,我收到一个运行时错误:

java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]:    86 cannot locate 'atof'....
我是使用NDK进行Android开发的初学者,所以我可能错过了一些东西,比如标志、编译器指令等等

我的
android.mk
文件是:

LOCAL\u路径:=$(调用我的目录)
包括$(清除变量)
本地\u允许\u未定义的\u符号:=真
LS_CPP=$(subst$(1)/,$(通配符$(1)/$(2)/*.c))
本地_模块:=libA
本地共享库:=\
libgmodule-2.0\
libgobject-2.0\
libgthread-2.0\
libglib-2.0
本地\u SRC\u文件:=sourceFile.c
包括$(构建共享库)
来自

atof
换句话说不是一个库函数,它是一个调用
strod
的内联函数


如果需要通过加载库来调用,只需使用strtod即可。

谷歌已经移动了一些C标准库函数,如atof()从头文件中的内联函数到普通函数。最新的NDK将默认构建一个。因此,它仅与在设备的标准C库(libc.so)中具有atof()函数的最新Android设备兼容。这意味着,如果在具有旧版本C库的旧设备上运行库,则加载dll时会出现错误,因为预期的atof()函数将不存在

您是否尝试在Application.mk中设置此选项:

APP_PLATFORM := android-9
这将导致ndk编译器生成与旧Android版本兼容的代码


您还可以尝试将NDK安装降级到版本10b(此版本早于将atof从内联移动到libc的一部分的更改,因此完全避免了此问题).

这表明加载的库对象不是用NDK编译的,或者至少不是用NDK头正确编译的。尽管我有点惊讶,如果它是用另一个工具链构建的,它甚至在特定函数上失败,而不是拒绝尝试加载。@ChrisStratton Su我也很惊讶,NDK早于r5,但我怀疑使用的NDK没有那么旧。我正在使用NDKR8C。我刚刚下载了它,并使用NDKbuild-C“项目路径”没有任何标志和修饰符。我错过了什么?@void-你是从源代码构建所有内容,还是下载了预构建的。那么库呢?最好给开源库命名,或者与它的维护人员讨论这个问题。可能库的构建设置不好,使用了主机包含(即,用于你的电脑)而不是android包含部分构建过程。例如,如果有人在某个时候在非交叉编译配置中运行配置脚本,可能会发生这种情况。您是如何构建项目的?您是否使用android-ndk-r8d/docs/standalone-toolchain.html文件中记录的独立工具链?这可能是个问题使用运行时系统,您在…上运行应用程序,因为“构建系统自动将C库、数学库和C++支持库链接到您的本机代码,因此不需要在LoalAlxLDLBS行中列出它们。抱歉回答得太晚。LOCAL_ALLOW_UNDEFINED_SYMBOLS-关闭对未定义符号的检查,因此我错过了对stdlib.h(atof)的依赖在另一个文件中。这是我的错。我错误地忽略了这个标志。复制和粘贴是真正的邪恶。@void:您是否建议不要使用
LOCAL\u允许\u未定义的\u符号
?谢谢,对于新的gradle版本,您可以设置
ndk{platformVersion=“9”
APP_PLATFORM := android-9