我试图在我的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即可。

10-08 11:44