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編譯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM