调用jni共享库错误分析

JNI简单实现Java调用C++/C的HelloWorld 简介 JVM封装了各种操作系统实际的差异性的同时,提供了JNI技术,它是一种双向的接口,使得开发者可以通过Java代码调用到各种native的 库,反之亦然。所以JNI(Java Native Interface)能作为Java语言的一部分,她能够作为粘合剂将Java应用和其他 阅读详情

启动APK的时候报错:

E/AndroidRuntime(23709): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN14SkImageDecoder7FactoryEP8SkStream" referenced by "libjni_fireair.so"...


在jni的源码中找不到符号


readelf -s libjni_fireair.so 

查看没有找到对应的,

考虑到是交叉编译,改用 arm-none-linux-gnueabi-objdump -d libjni_fireair.so 命令

还是找不到符号_ZN14SkImageDecoder7FactoryEP8SkStream , 说明是调用了第三方的库造成找不到符号。


源码中搜索SkImageDecoder

发现SkImageDecoder* bounddecoder = SkImageDecoder::Factory(&stream);

有这样一个调用


搜索头文件SkImageDecoder.h

找到路径 external/skia/include/core/SkImageDecoder.h



看jni_fireair下的Android.mk 

里面有一句 LOCAL_SHARED_LIBRARIES := libskia


原来调用了共享库skia, 不过由于不同平台该库不一样,造成找不到符号。


java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol 错误解决 查看符号表信息 nm -A XXX.so > a.txt。查看依赖库 readelf -d xxxx.so。 阅读详情

相关推荐

保姆级教程:用Kalibr搞定Intel D435i三目(RGB+双目)相机联合标定,附完整ROSbag录制避坑指南

本文详细介绍了如何使用Kalibr工具对Intel D435i三目相机(RGB+双目)进行高精度联合标定,包括硬件准备、ROSbag录制技巧、Kalibr标定实战及结果验证。特别针对实际工程中的常见问题提供了解决方案,帮助开发者提升SLAM和三维重建等应用的精度。

weixin_42524762的博客 405

jni javac -h生成头文件 找不到符号

在学习jni时,写完native方法后要用javac -h命令来生成.h文件。但是,我在项目中写的native 方法中使用了自己定义的类,然后使用javac -h 命令时出现了找不到符号的错误。 查找方法,这篇博客说的和我的情况很像: https://blog.youkuaiyun.com/hanxueyu666/article/details/70175443 它最后的解决办法是同时编译,使用*.ja...

amy130的博客 4662

通俗易懂的图解二叉搜索树、AVL树和红黑树

搜索是一种很常见的需求,当数据较多时,如何找到目标对象时,即需要搜索查找。 那么如何快速找到目标呢,最朴素的思想就是暴力查找,一个一个对比。 显然,当数据量增大时,我们需要优化查找方法获取更快的查找速度,我们可以通过维护一个有序数组,从而实现二分查找,查找速度从O(n)降为O(longn)。 但是数组并不便于插入和删除,链表便成为了最好的选择。 既然是采用二分查找,那么不如直接按照查找的步骤维护一种数据结构,于是二叉搜索树出现了。 二叉搜索树的性质为: 若左子树不为空,则左子树上所有节点值都小于根结点值;

暗色光的博客 758

解决java.lang.UnsatisfiedLinkError:dlopen failed:cannot locate symbol "tcgetattr" referenced by..

问题 : java.lang.UnsatisfiedLinkError: dlopen failed: cannot locatesymbol "tcgetattr" referenced by "xxxlib.so"... 09-15 12:21:41.297: E/AndroidRuntime(19825):at java.lang.Runtime.loadLibrary(Runtime.java:361)

darwinlong的博客 2万+

数据分析(二):学生成绩预测分析报告

表1 特征变量描述变量描述school学生的学校sex学生的性别age学生的年龄address学生的家庭住址类型famsize家庭规模Pstatus父母同居状况Medu母亲的教育Fedu父亲的教育Mjob母亲的工作Fjob父亲的工作reason选择学校的理由guardian学生监护人traveltime从家到学校的时间studytime每周学习时间failures过去的类失败次数schoolsup额外的教育支持famsup家庭教育支持。

m0_73963149的博客 4417

产品经理必备知识——API接口

在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如果你选择允许,app就会根据你的当前位置为你提供更加个性化的一些服务,当然也有一些app拿到你的位置信息做出损害用户利益的行为,所以还是需要谨慎授权。首先,看接口文档的场景一般是自身业务模块需要获取外部的数据,但又不想自己重新开发,寻找外部已经实现的有开放能力的供应商(包含企业内部的)。通过发送请求和响应消息的方式实现程序间的通信。

WBKJ_Noah_的博客 3457

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "strtof" referenced by "libsupp

1.报错: 10-29 10:17:23.960 5768-5788/com.coocaa.mall E/APP_CRASH: java.lang.RuntimeException: Failure during heap dump; check log output for details

meetings的专栏 4471

用OpenNI2获取奥比中光Astra Pro及 Astra Pro SM输出的深度图(win,linux arm64 x64平台)

搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 上获取深度信息,之前的驱动下载已经不好用了。

babytiger的专栏 1305

问题记录:dlopen failed: cannot locate symbol "XXX" referenced by "XXX.so"

1. 报错log dlopen failed: cannot locate symbol "avcodec_find_encoder" referenced by "/data/app/<包名>/lib/arm/libettwo-media.so" 2. 现象 编译正常。运行之后加载so库时崩溃,找不到指定方法。 static { System.loadLi...

SkylarLiuu的博客 1万+

QCC304x系列开发教程(实战篇)之5.2 QCC3040之提示音

earbud_init.c中,初始化table中UiPrompts_Init /*! \brief Table of initialisation functions */ static const init_table_entry_t appInitTable[] = { ......... {UiPrompts_Init, 0, NULL}, ......... } ui_prompts.c中是提示音音处理的主要逻辑和配置源文件 函数static void uiPro...

心跳包的博客 2395

电子电器架构刷写方案——General Flash Bootloader

### 文章大体有如下内容: ### 1、简介 ### 2、刷写系统概述 ### 3、Flash Bootloader刷写流程 ### 4、Flash Bootloader架构介绍 ### 5、关于刷写的思考

Soly_kun的博客 2211

Android开发中JNI的全面分析

JNI (Java Native Interface,Java本地接口)是Java平台上定义的一套标准的本地编程接口。JNI允许Java代码与本地代码(如C/C++实现的、依赖于特定硬件和操作系统的代码)互操作,即Java代码可以调用本地代码,本地代码也可以调用Java代码。通过JNI调用本地代码,可以实现Java语言所不能实现的功能。在Android平台上,Dalvik虚拟机会实现JNI定义的接口。总结:JNI是java与本地Native代码的桥梁。

h397318057的博客 2338

文献综述三大痛点用AI轻松解决!借助Gemini 3 Pro搞定检索难、阅读慢、框架乱问题(附 AI 提示词)

4)“漏斗式”结构:先介绍宏观领域的研究现状,再缩小范围,聚焦于与你课题直接先关的子领域,深入探讨与你研究变量直接相关的文献, 指出前人没做过、没做全或结论有矛盾的地方,再顺势提出你的研究课题,这种结构逻辑最清晰,能直接引导读者发现你研究的必要性。想要有针对性的搜到相关文献,必须先把模糊的研究题目拆解成精准的检索语言,这个时候就需要建立一个关键词矩阵,如核心词、同义词、学术术语、上下位词,以及对应的英文表达。请围绕【我的研究主题/关键词】,检索近5年发表的高被引的中英文文献,优先选择顶刊综述/论文。

智能AI让学术科研更容易 277

Android 系统日志(Log) JNI实现流程源码分析

Java Native Interface (JNI) 是一种编程框架,使得Java代码能够与用其他编程语言(如C和C++)编写的本地代码进行交互。JNI允许Java代码调用本地代码的函数,也允许本地代码调用Java代码的函数。下面是对JNI机制的详细概述,包括其基本原理、工作流程、常见用途和示例代码。Android日志系统主要由Log类和__android_log_print等C/C++函数组成,提供了记录调试信息的功能。

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

无法加载JNI共享库(JDK)

当我尝试打开Eclipse时 ,弹出对话框指出: 无法加载JNI共享库“ C:/JDK/bin/client/jvm.dll”。 此后,Eclipse强制关闭。 我想提出几

asdfgh0077的博客 5437

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Java基础】JNI机制开发指南—认识JNI原理及如何用 Java 调用 C 的动态链接库

java是一种跨平台的语言,那么它为什么能做到跨平台,`实际上是因为不同的平台(windows、linux、mac-os)java有不同的解释器,对应java不同的虚拟机(JVM)`,这样,就可以做到`源代码文件(.java)只需一次编译成字节码文件(.class),就可以在不同的平台运行 `。而java不是万能的,有些操作需要调用`操作系统平台API`实现,`JNI`就是Java用于和`其他语言`进行互操作的API,称为`Java Native Interface (Java本地接口)`

墩墩分墩 4406

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JNI——Java调用C/C++函数

转载:https://www.cnblogs.com/Seiyagoo/p/3496834.html public abstract class ClassLoader { private static native void registerNatives(); static { registerNatives(); } } 最近看activemq源码,看到Class...

786

加载JNI共享库失败(JDK)

Java 必知必会 第 20 篇 加载JNI共享库失败(JDK) 问题: 当我试图打开Eclipse时,会弹出一个提示写着: Failed to load the JNI shared library “C:/JDK/bin/client/jvm.dll”`. 然后,Eclipse会强制关闭。 我做了以下几点: ·我检查那个路径有没有存在什么,真的有存在。 ·我的Eclipse和Java SE D...

十年互联网开发老兵,陪你一起学技术 2031

JNI编程

JNI介绍 Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java SoftwareDevelopment Kit (SDK))的一部分。 JNI允许 Java 代码使用以其它语言(譬如 C 和 C++)编写的代码和代码库。Invocation API(JNI 的一部分)可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用 Java 代码。 环境需求 JNI 最常见的两个应用

slw20010213的博客 719

python调用c语言的.h_Java使用JNI在使用第三方功能的C语言中导入共享库(Python.h)...

我的JNI集成有问题“lib.so公司”是从“lib.c”编译的,看起来像:#include #include "messageService.h"#include PyObject *pName, *pModule, *pDict, *pFunc;PyObject *pArgs, *pValue;JNIEXPORT jboolean JNICALL Java_Test_test(JNIEnv *...

weixin_39611340的博客 369

Java JNI实现原理初探

前言 写这个是出于好奇。 我们知道cpu只认得 "0101101" 类似这种符号, C、C++ 这些代码最终都得通过编译、汇编成二进制代码,cpu才能识别。而Java比C、C++又多了一层虚拟机,过程也复杂许多。Java代码经过编译成class文件、虚拟机装载等步骤最终在虚拟机中执行。class文件里面就是一个结构复杂的表,而最终告诉虚拟机怎么执行的就靠里面的字节码说明。 Ja

最帅惋红曲 2万+

java调用c的库_【jni编程】—— 从Java调用C/C++

从Java调用C/C++当无法用 Java 语言编写整个应用程序时,JNI 允许您调用C/C++本机代码。在下列典型情况下,您可能决定使用本机代码:希望用更低级、更快的编程语言C/C++去实现对时间有严格要求的代码。希望从 Java 程序访问旧代码或代码库。需要标准 Java 类库中不支持的依赖于平台的特性。从 Java 代码调用 C/C++ 的六个步骤从 Java 程序调用 C 或 C ++ 代...

weixin_42120550的博客 459

JNI踩坑实录:当Java调用C++遇到SIGSEGV错误时,我是如何一步步排查的

本文详细记录了Java通过JNI调用C++代码时遭遇SIGSEGV(段错误)的完整排查过程。文章系统性地介绍了如何解读JVM生成的hs_err_pid日志、构建排查清单、使用GDB进行动态调试,并通过实战案例揭示了环境变量缺失等深层原因。旨在为面临类似原生层崩溃的中高级Java开发者提供一套实用的调试思路与工具链。

weixin_29179311的博客 560

cocos2d-x c 调用java_使用JNI使用Java来调用C的Android / Cocos2d-x不满意链接错误

编辑:我已经解决了这个问题(并通过更改以下内容找到了JNI苦难中的下一个问题!)在Java和C中删除本机方法的“静态”声明,添加Java方法以获取我的SimpleGame类的实例,并调用public static void callCppApiResponse (String result, String token, long context) {**getInstance()**.cppAnd...

weixin_35764532的博客 116

JNI——Java调用DLL

基本概念JNI其实是Java Native Interface的简称,也就是java本地接口。它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++)。对于那些对性能要求比较高的Java程序或者Java无法处理的任务无疑是一个很好的方式。实验方案假设我们的Java程序为J2C.java,C程序为J2C.c,Java与C之间的通信函数名为write2proc; write2proc的

chen8238065的专栏 714
上一篇: git binary diffs are not supported 问题
下一篇: openwrt编译问题
Evan_Lo
博客等级 码龄12年 10粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值