我试图在我的
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.