Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cocos2dx: dlopen failed: no se puede localizar el símbolo "atof" referenciado por "libcocos2dcpp.so"

Estoy intentando funcionar mi juego de cocos2d-x en los dispositivos androides, trabaja perfectamente en androide 5.0 (lollipop), pero falla en versiones androides más bajas. Estoy teniendo el siguiente error:

02-25 10: 41: 09.787: E / ResourceType (18090): 0x5ad385b8: Error al ResTable :: remove () cookie = 0x3, no última tabla. MHeaders.size () = 4. Advertencia de accidentes espontáneos cuando el recolector de basura se ejecuta. 02-25 10: 41: 09.797: E / asset (18090): Error al eliminar el recurso de tiempo de ejecución de la piel (cookie 0x3) 02-25 10: 41: 09.797: 10: 41: 09.817: D / dalvikvm (18090): Intentando cargar lib /data/app-lib/com.example.game-2/libcocos2dcpp.so 0x418c9ce8 02-25 10: 41: 09.817: E / dalvikvm (18090) ): Dlopen ("/ data / app-lib / com.example.game-2 / libcocos2dcpp.so") falló: dlopen falló: no se puede localizar el símbolo "atof" referenciado por "libcocos2dcpp.so" … 02-25 10 : 41: 09.817: W / dalvikvm (18090): Excepción Ljava / lang / UnsatisfiedLinkError; Lanzado al inicializar Lcom / ejemplo / juego / juego; 02-25 10: 41: 09.817: W / dalvikvm (18090): La clase init falló en la llamada newInstance (Lcom / ejemplo / juego / juego) 02-25 10: 41: 09.817: D / AndroidRuntime (18090): Shutting down VM 02-25 10: 41: 09.817: W / dalvikvm (18090): threadid = 1: hilo saliendo con la excepción no captada (grupo = 0x415af8b0) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): EXCEPCIÓN FATAL: Principal 02-25 10: 41: 09.827: E / AndroidRuntime (18090): java.lang.UnsatisfiedLinkError: dlopen falló: no se puede localizar el símbolo "atof" referenciado por "libcocos2dcpp.so" … 02-25 10: 41: 09.827 : E / AndroidRuntime (18090): en java.lang.Runtime.loadLibrary (Runtime.java:361) ejemplo 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en java.lang.System.loadLibrary .java: 1225) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en com.example.game.game. (Game.java:126) 02-25 10: 41: 09.827: E / AndroidRuntime 18090): en java.lang.Class.newInstanceImpl (método nativo) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en java.lang.Class.newInstance (Class.java:1130) 02-25 10 : 41: 09.827: E / AndroidRun Hora (18090): en android.app.Instrumentation.newActivity (Instrumentation.java:1061) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2178 ) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2311) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android .app.ActivityThread.access $ 600 (ActivityThread.java:149) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1293) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android.os.Handler.dispatchMessage (Handler.java:99) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android.os.Looper .loop (Looper.java:137) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en android.app.ActivityThread.main (ActivityThread.java:5214) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en java.lang.reflect.Method.invokeNative (Método nativo) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): at j Ava.lang.reflect.Method.invoke (Method.java:525) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 739) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:555) 02-25 10: 41: 09.827: E / AndroidRuntime (18090): en dalvik.system.NativeStart.main (Método nativo).

Estoy utilizando cocos2d-x v2.2.6, Eclipse-Luna y android NDK r10d.

5 Solutions collect form web for “Cocos2dx: dlopen failed: no se puede localizar el símbolo "atof" referenciado por "libcocos2dcpp.so"”

Trate de añadir

APP_PLATFORM := android-19 

Como la primera línea de tu Appication.mk

Pruebe a usar el android NDK r9d. Para cocos2dx, Android NDK r9d es bueno para trabajar.

(Sé que esto duplica la respuesta anterior de m0mus en la solución sugerida, pero creo que la explicación más completa ayuda.)

Google ha movido algunas de las funciones de biblioteca estándar de C como atof () de ser funciones en línea en archivos de cabecera a funciones normales. Los últimos NDK usarán por defecto la construcción de un .so que sólo es compatible con los últimos dispositivos Android que tienen la función atof () en la librería estándar C del dispositivo (libc.so). Esto significa que si ejecuta una biblioteca en un dispositivo antiguo que tiene una versión anterior de la biblioteca C, obtendrá un error al cargar el dll ya que la función atof () esperada no existirá.

¿Ha intentado establecer esto en su Application.mk:

 APP_PLATFORM := android-9 

Esto hará que el compilador ndk construya código compatible con versiones anteriores de Android.

También puede intentar degradar la instalación de NDK a la versión 10b (esta versión es anterior al cambio en el que atof se movió de inline a parte de libc evita el problema completamente).

Yo lo estoy haciendo bien, mi env actual es cocos2d-x 3.3, NDKr10d, ADT paquete (update24)

  log("This is A TEst for ATOF ,%f ", std::atof("1.0")); 

Intente incluir _GXX_EXPERIMENTAL_CXX0X_ en símbolos, deje valores vacíos

En Android Studio tiene que configurar manualmente el NDK. Vaya al archivo local.properties de su proyecto y configure el valor ndk.dir en el directorio ndk.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.