No se puede cargar la biblioteca: reloc_library : no se puede localizar 'rand'

Estoy tratando de usar la biblioteca PJSIP para mi aplicación de Android. He construido la aplicación de ejemplo pjsua de acuerdo con este manual: https://trac.pjsip.org/repos/wiki/Getting-Started/Android

Pero cuando la aplicación de ejemplo se está iniciando, la excepción se activa:

12-06 15:03:58.043: D/dalvikvm(628): Trying to load lib /data/data/org.pjsip.pjsua2.app/lib/libpjsua2.so 0x4129d980 12-06 15:03:58.064: W/dalvikvm(628): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/pjsip/pjsua2/app/MyApp; 12-06 15:03:58.064: D/AndroidRuntime(628): Shutting down VM 12-06 15:03:58.064: W/dalvikvm(628): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 12-06 15:03:58.083: E/AndroidRuntime(628): FATAL EXCEPTION: main 12-06 15:03:58.083: E/AndroidRuntime(628): java.lang.ExceptionInInitializerError 12-06 15:03:58.083: E/AndroidRuntime(628): at org.pjsip.pjsua2.app.MainActivity.onCreate(MainActivity.java:85) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.Activity.performCreate(Activity.java:4465) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.access$600(ActivityThread.java:123) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.os.Handler.dispatchMessage(Handler.java:99) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.os.Looper.loop(Looper.java:137) 12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.main(ActivityThread.java:4424) 12-06 15:03:58.083: E/AndroidRuntime(628): at java.lang.reflect.Method.invokeNative(Native Method) 12-06 15:03:58.083: E/AndroidRuntime(628): at java.lang.reflect.Method.invoke(Method.java:511) 12-06 15:03:58.083: E/AndroidRuntime(628): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 12-06 15:03:58.083: E/AndroidRuntime(628): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 12-06 15:03:58.083: E/AndroidRuntime(628): at dalvik.system.NativeStart.main(Native Method) 12-06 15:03:58.083: E/AndroidRuntime(628): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 37 cannot locate 'rand'... 12-06 15:03:58.083: E/AndroidRuntime(628): at java.lang.Runtime.loadLibrary(Runtime.java:370) 12-06 15:03:58.083: E/AndroidRuntime(628): at java.lang.System.loadLibrary(System.java:535) 12-06 15:03:58.083: E/AndroidRuntime(628): at org.pjsip.pjsua2.app.MyApp.<clinit>(MyApp.java:235) 

Parece que appl no puede cargar libpjsua2.so biblioteca. Nunca he utilizado el NDK antes, así que no tengo ninguna idea sobre este problema, por favor ayúdame …

Esto sucede si ha creado sus componentes nativos con el objetivo de android-21 , pero está intentando ejecutarlo en un dispositivo con una versión anterior de Android. A menos que usted tome un cuidado muy especial, no puede ejecutar binarios construidos con el objetivo de android-21 en dispositivos más antiguos. Para las funciones básicas de C, no debería importar la versión de destino entre android-3 y android-20 que use, debería funcionar en todas ellas, pero si usa android-21 sólo funciona en esa versión y más reciente.

Consulte https://stackoverflow.com/a/27093163/3115956 para obtener más detalles sobre este problema.

Mstorsjo responde a mi pregunta. Pero quiero escribir un comentario: Tenía archivos de propiedades correctas, pero durante el edificio pjsip encontré los siguientes registros:

 sip@ubuntu:~/pjsip/trunk$ ./configure-android configure-android: APP_PLATFORM not specified, using android-21 configure-android: TARGET_ABI not specified, using armeabi 

Por lo tanto, si desea compilar el proyecto en alguna versión de plataforma específica, debe establecer el parámetro APP_PLATFORM para configurar el script android.

 TARGET_ABI=armeabi-v7a APP_PLATFORM=android-8 ./configure-android --use-ndk-cflags 

He encontrado esto al usar el teléfono de HUAWEI con la biblioteca del opni y del pngquant jni para el androide. Por último, la solución es que añado rand, srand y atof funciones de implementación en mi archivo de origen. Entonces el problema desapareció.

Solución de https://github.com/cocos2d/cocos2d-x/issues/15234 ¡ Pruébelo!

 static u_long myNextRandom = 1; double atof(const char *nptr) { return (strtod(nptr, NULL)); } int rand(void) { return (int)((myNextRandom = (1103515245 * myNextRandom) + 12345) % ((u_long)RAND_MAX + 1)); } void srand(u_int seed) { myNextRandom = seed; } 
  • Error en la configuración de pjsip para android
  • Registro de cuenta PJSip
  • PJSip en android
  • ¿Cuál es la mejor manera de acercarse? Utilizar PJSIP o SIP Android API para crear una aplicación de llamada basada en SIP
  • Problema de calidad de voz en Android VoIP app con PJSIP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.