Android Jni调用so库,加载库失败分析

简介:

现有一个项目,通过JNI接口调用底层库,例如:lib***.so

如下所示,总是加载不成功。调试发现,每次加载so库,会跳到catch异常处理部分,然后打印异常log信息。

static{  
	try{
		System.load("/data/data/com.***/lib/lib***.so");
	}  
	catch(UnsatisfiedLinkError ulink){ 
		Log.i("HVnative====","Can not load library");
		ulink.printStackTrace();
	}
}


arm-none-linux-gnueabi-ld工具发现有些函数未定义,如下所示:

snowdream@snowdream:~/workspace/$ arm-none-linux-gnueabi-ld lib***.so
arm-none-linux-gnueabi-ld: warning: libc.so, needed by lib***.so, not found (try using -rpath or -rpath-link)
arm-none-linux-gnueabi-ld: warning: libdvm.so, needed by lib***.so, not found (try using -rpath or -rpath-link)
lib***.so: warning: the use of `tmpnam' is dangerous, better use `mkstemp'
arm-none-linux-gnueabi-ld: warning: cannot find entry symbol _start; defaulting to 00008248
lib***.so: undefined reference to `__aeabi_fadd'
lib***.so: undefined reference to `__aeabi_fdiv'
lib***.so: undefined reference to `__aeabi_fcmpge'
lib***.so: undefined reference to `__aeabi_dcmpgt'
lib***.so: undefined reference to `__aeabi_dcmpeq'
lib***.so: undefined reference to `__aeabi_uidiv'
lib***.so: undefined reference to `__aeabi_ui2d'
lib***.so: undefined reference to `__aeabi_dcmple'
lib***.so: undefined reference to `__aeabi_fcmplt'
lib***.so: undefined reference to `__aeabi_i2d'
lib***.so: undefined reference to `__aeabi_uidivmod'
lib***.so: undefined reference to `__aeabi_fmul'
lib***.so: undefined reference to `__aeabi_d2uiz'
lib***.so: undefined reference to `__aeabi_fcmpeq'
lib***.so: undefined reference to `__aeabi_d2iz'
lib***.so: undefined reference to `__aeabi_dcmpge'
lib***.so: undefined reference to `__aeabi_ldivmod'
lib***.so: undefined reference to `__aeabi_d2f'
lib***.so: undefined reference to `__aeabi_dmul'
lib***.so: undefined reference to `__aeabi_dcmplt'
lib***.so: undefined reference to `__aeabi_f2d'
lib***.so: undefined reference to `__aeabi_fcmple'
lib***.so: undefined reference to `__aeabi_idivmod'
lib***.so: undefined reference to `__aeabi_fsub'
lib***.so: undefined reference to `__aeabi_ddiv'
lib***.so: undefined reference to `__aeabi_ui2f'
lib***.so: undefined reference to `__aeabi_i2f'
lib***.so: undefined reference to `__aeabi_idiv'
lib***.so: undefined reference to `__aeabi_dadd'
lib***.so: undefined reference to `__aeabi_fcmpgt'
lib***.so: undefined reference to `__aeabi_dsub'
lib***.so: undefined reference to `__aeabi_f2iz'


如果“ undefined reference to” 后面打印的函数是:
1、 你自己写的函数,那么你应该去检查自己所写的这段代码有何问题,修改之后,再重新编译底层库;

2、系统函数,暂时还没找到合适的解决办法,正在努力寻求方法。


相关文章
|
9天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
35 15
Android 系统缓存扫描与清理方法分析
|
1天前
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
10天前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
13天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
15 1
|
18天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
64 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
24天前
|
存储 Linux Android开发
Android底层:通熟易懂分析binder:1.binder准备工作
本文详细介绍了Android Binder机制的准备工作,包括打开Binder驱动、内存映射(mmap)、启动Binder主线程等内容。通过分析系统调用和进程与驱动层的通信,解释了Binder如何实现进程间通信。文章还探讨了Binder主线程的启动流程及其在进程通信中的作用,最后总结了Binder准备工作的调用时机和重要性。
Android底层:通熟易懂分析binder:1.binder准备工作
|
29天前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
115 3
|
23天前
|
开发工具 Android开发 Swift
安卓与iOS开发环境的差异性分析
【10月更文挑战第8天】 本文旨在探讨Android和iOS两大移动操作系统在开发环境上的不同,包括开发语言、工具、平台特性等方面。通过对这些差异性的分析,帮助开发者更好地理解两大平台,以便在项目开发中做出更合适的技术选择。
|
4天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。