我试图在我的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_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LS_CPP=$(subst $(1)/,,$(wildcard $(1)/$(2)/*.c))
LOCAL_MODULE := libA
LOCAL_SHARED_LIBRARIES := \
libgmodule-2.0 \
libgobject-2.0 \
libgthread-2.0 \
libglib-2.0
LOCAL_SRC_FILES:= sourceFile.c
include $(BUILD_SHARED_LIBRARY
最佳答案
从stdlib.h in the Android source;
static __inline__ double atof(const char *nptr)
{
return (strtod(nptr, NULL));
}
换句话说,
atof
不是库函数,它是一个内联函数,它调用strtod
。如果您需要通过加载库来调用,则只需使用
strtod
即可。