java jni ubuntu 环境搭建时遇到的坑

1:版本不一致遇到的坑

javah的版本需要同javac的版本一致。如果版本的问题搞不定,直接用andorid  source build之后的环境即可

2:javah使用遇到的坑

jni中字段描述符可以使用javah生成

javah -jni -classpath . JNIdemo

其中 -classpath . 表示从当前目录搜索class 如果不添加会爆出来各种不太相关的错误

3:执行class时遇到的坑

如果执行class时候,需要调用 so

仅仅直接执行 java JNIdemo会报错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no native in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1124)
    at JNIDemo.<clinit>(JNIDemo.java:4)

这时需要 exprort lD_LIBRARY_PATH=.   等号两边不要有空格。用来配置so的寻找路径

4.java 静态map c

直接使用javah来生成.h文件。在c中inlcude 该 .h即可。

当然也可以将java.h 去掉。把inlude 的内容都放到c文件中

如果大型工程中无法单独compile,可以将需要map的函数单独拿出来创建一个java文件。

5:编译so文件的指令

gcc -I (jni.h的路径)  -I(jvm.h的路径) -fPIC -shared -o libnative.so native.c

eg:

 gcc -I /home/austinxin/work/SM8150-Android/android/prebuilts/jdk/jdk9/linux-x86/include -I /home/austinxin/work/SM8150-Android/android/prebuilts/jdk/jdk9/linux-x86/include/linux/ -shared -o libnative.so JNIDemo.c

eg:

gcc -I /usr/lib/jvm/java-1.11.0-openjdk-amd64/include/ -I /usr/lib/jvm/java-11-openjdk-am64/include/include/ -fPIC -shared -o libnative.so native.c

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 内核配置过程中遇到的问题

大家都知道在修改内核需要两步 配置和编译 在配置过程中 用到的命令 make config、make menuconfig、make xconfig 前两个是文本界面 最后一个是图形界面 不建议用最后一个 因为占用的资源太多 有点卡 但如果你的硬件配置极高 我也不否定 你来用 转入正题 我在配置时 make menu…

c如何返回数组给java

jintArray c_hello(JNIEnv *env, jobject cls, jintArray arr) { jint a[4]{12,13,14,15}; jintArray arry; arry (*env)->NewIntArray(env,4); (*env)->SetIntArrayRegion(env,arry,0,4,a); return arry; } 实际上也…

JNDI的XML相关配置(context.xml和web.xml)

1. 在tomcat目录下conf/context.xml文件中 加入一下代码   <Resource name"jdbc/sqlconnpool" auth"Container" type"javax.sql.DataSource" driverClassName"com.microsoft.sqlserver.jdbc.SQLServerDriver" …

Vue 作用域插槽

原博出处&#xff1a; 作者&#xff1a;SentMes 链接&#xff1a;SentMes作者书写的作用于插槽链接 https://www.jianshu.com/p/0c9516a3be80 来源&#xff1a;简书 ** ** ** 十分感谢原作者&#xff0c;写的十分详细&#xff0c;原作者辛苦了&#xff01; 深入理解vue中的s…

nuc972的ramfs的配置yaffs2,ubi文件系统

按照技术支持的推荐&#xff0c;使用ramfs文件系统。那么就可以在uboot的nuc970_evb.h中将JEFS yaffs ubi 的相关支持去掉就可以了。这样理应能减少很大部分的uboot大小。剩下就是配置内核中的ramfs配置。 General setup ---> [ ] Initial RAM filesystem and RAM disk (i…

I/O多路复用之epoll

2019独角兽企业重金招聘Python工程师标准>>> 在上一章&#xff0c;我们对select进行了大致的描述&#xff0c;知道了它相对传统的阻塞式服务提高了并发度&#xff0c;但是它也由于轮询而导致效率底下。本文对epoll进行讲解&#xff0c;相比select它的并发度更高&…

关于24点游戏的编程思路与基本算法

From: http://blog.csdn.net/wangqiulin123456/article/details/8145545 24点游戏的算法&#xff0c;其中最主要的思想就是穷举法。所谓穷举法就是列出4个数字加减乘除的各种可能性&#xff0c;包括括号的算法。我们可以将表达式分成以下几种&#xff1a;首先我们将4个数设为a…

Xtreme TaskPanel

原文来自方案网 http://www.fanganwang.com/Product-detail-item-1230.html&#xff0c;欢迎转载。 关键字&#xff1a;TaskPanel Codejock Xtreme TaskPanel为Windows开发者提供了一个非常熟悉的任务栏&#xff0c;与Windows资源管理器类似。该任务面板可以像VS.NET工具一样被…

linux设备驱动之按键外部中断

老习惯先贴一波代码再仔细分析消化。 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <linux/irq.h> #include <asm/uaccess.h> #includ…

C语言实现ICMP协议Ping命令

From: http://www.360doc.com/content/12/0429/19/1317564_207540510.shtml 大部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法。在这篇文章中&#xff0c;作者将介绍如何用C语言编写一个模拟ping命令功能的程序。ping命令是用来查看网络上另一个主机…

Ubuntu 时间同步

1. 安装ntpdate工具# sudo apt-get install ntpdate2. 设置系统时间与网络时间同步# ntpdate cn.pool.ntp.org

vscode tab键快捷生成元素html标签

按照上图在设置中找到对应的文件夹&#xff0c; 直接加上"emmet.triggerExpansionOnTab": true,这段代码保存 重新打开vscode即可

Linux用ICMP协议实现简单Ping网络监测功能

From: http://www.linuxidc.com/Linux/2012-05/61073.htm ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制报文协议。它是TCP/IP协议族的一个子协议&#xff0c;用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路…

解决vscode格式化代码html属性换行问题; ctrl+s格式化去除分号,格式化自动单引号;解决js格式化换行问题;mac上的settings.json完整配置

右键格式化文档或者ctrl s保存 html不换行 1.安装两个插件①vetur ②Prettier - Code formatter 2.在vetur的settings.json中设置 配置ctrls触发格式化去除分号和单引号&#xff1b;配置格式化js换行&#xff1b;配置解决html属性换行 将最后一部分的设置&#xff0c;修改…

微信分享接口

看着微信分享的 demo 好纠结啊。。。不知道怎么去触发他。哪位大神可以指点一下。。。点击按钮弹出分享js不太懂。。搞了半天也没搞出来。。请教大家。wx.ready(function () {wx.onMenuShareTimeline({title: window.shareData.tTitle,link: window.shareData.timeLineLink,img…

OSI网络七层简义

OSI网络七层 1:物理层:如网卡,光纤,线览 2.数据链路层:交换机,记录MAC地址与内网IP 3.网络层:路由器,负责记录公网IP,如PPPOE拨号,固定IP 4.传输层:代理软件,如Apache代理80端口,SVN 3690端口等等 5.会话层,6.表现层是由第7层应用层决定转载于:https://blog.51cto.com/kongdq/9…

uniapp使用iconfont字体图标

vue引入字体图标看这篇 本文介绍两种方案&#xff1a;一、使用iconfont字体图标 二、使用icon图片 情景1&#xff1a;使用灰色的字体图标 方案一&#xff1a;使用iconfont字体图标 步骤1&#xff1a;下载iconfont 步骤2&#xff1a;解压后只需要将ifonfont.css这一个文件 &am…

linux中断pollselcet按键处理机制

在上一篇linux按键中断处理中&#xff0c;我们采用按键中断处理获取按键&#xff0c;在read函数中阻塞读取&#xff0c;当按键发生时&#xff0c;read自动解除阻塞&#xff0c;实现应用层读取到相应的按键值。在上一节中如果没有按键到来&#xff0c;应用层会一直阻塞等待在rea…

04:求整数的和与均值

总时间限制: 1000ms内存限制: 65536kB描述读入n&#xff08;1 < n < 10000&#xff09;个整数&#xff0c;求它们的和与均值。 输入输入第一行是一个整数n&#xff0c;表示有n个整数。第2~n1行每行包含1个整数。每个整数的绝对值均不超过10000。输出输出一行&#xff0c;…