cannot locate symbol "atof" referenced by错误分析
Posted 关注移动互联网,投身移动互联网。。。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cannot locate symbol "atof" referenced by错误分析相关的知识,希望对你有一定的参考价值。
ndk从r8升级到r10后, 使用eclipse编译出来的so库报错了,加载库的时候报错cannot locate symbol "atof" referenced by
原因:android的stdlib.h中atof是内联的
解决方法:将所有的atof改成strtod
示例代码:
char *strpi = "3.1415";
double dpi;
dpi = atof(strpi); 修改为: dpi = strtod(strpi, NULL);
参考自:http://stackoverflow.com/questions/14571399/Android-ndk-cant-find-atof-function
原文如下:
From stdlib.h in the Android source;
static __inline__ double atof(const char *nptr)
{
return (strtod(nptr, NULL));
}
atof is in other words not a library function, it‘s an inline function that calls strtod.
If you need to call through loading a library, just use strtod instead.
2、
在Appication.mk里第一行加入 APP_PLATFORM := android-19 (我的就是这个问题),不行的话再试试 改成 APP_PLATFORM := android-9
再不行就多换几个ndk版本试试这个方法。
3、
今天使用ndk编译一个第三方库,编译ok后,运行的时候报错
dlopen failed:cannot locate symol "atof" referenced by ...
网上查找了资料,原因是atof不是库中的函数,而是inline函数:
http://stackoverflow.com/questions/14571399/Android-ndk-cant-find-atof-function
解决思路是制作一个静态库,作为一个中间体,然后再根据这个静态库生成最终的动态库;
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := YourLibStatic
LOCAL_SRC_FILES := xxx.c
# for logging
LOCAL_LDLIBS += -llog
# for native windows
LOCAL_LDLIBS += -landroid
LOCAL_CFLAGS += -UNDEBUG
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := YourLib
LOCAL_STATIC_LIBRARIES :=YourLibStatic
include $(BUILD_SHARED_LIBRARY)
上面的YourLibStatic就是一个中间体,而YourLib是你最终想要产生的东西;
经过这么一转换,atof自然就包含到so中了,不会报找不到符号的错误;
要么就换成r8编译。
以上是关于cannot locate symbol "atof" referenced by错误分析的主要内容,如果未能解决你的问题,请参考以下文章
cannot locate symbol "atof" referenced by错误分析
安卓4.4.2系统使用sqlcipher时,出现dlopen failed: cannot locate symbol referenced by...
Structure Core Depth Camera Android App UnsatisfiedLinkError: cannot locate symbol "__sfp_handl
Android NDK cannot locate symbol "__register_atfork"的一次经典定位分析~
Android NDK cannot locate symbol "__register_atfork"的一次经典定位分析~
NDK编译库执行时报dlopen failed: cannot locate symbol "__exidx_end" 解决的方法