[Android系统] JNI例子

文件:

    HelloJNI.java
    HelloJNI.class
    
    HelloJNI.h
    HelloJNI.c
    
    HelloJNI.o
    hellojni.so

步骤:

1.编写Java代码   	HelloJNI.java	
		
2.编译java代码   	javac HelloJNI.java 		--> HelloJNI.class

3.生成头文件	 	    javah HelloJNI				--> HelloJNI.h

4.编写头文件对应的实现c文件
	a.编译HelloJNI.c ---> HelloJNI.o
	
		gcc -fPIC -c HelloJNI.c -I /usr/lib/jvm/java-8-openjdk-arm64/include -I /usr/lib/jvm/java-8-openjdk-arm64/include/linux 
	
	b.o变成so
	
		gcc -shared HelloJNI.o -o  hellojni.so

5.执行java文件

    java HelloJNI

前提:
        加载库有两个函数,一个是System.loadLibrary, 一个是system.load

---------------------------
这里碰到一个问题:

    就是用static { System.loadLirary("hellojni"); },

    执行java,当前文件夹下的so找不到, 运行报错,

    老是说 Exception in the Thread "main" java.lang.UnsatisfiedLinkError: no hellojni in java.library.path



问题的尝试与解决:
    
    1.我这里按网上的方法,export LD_LIBRARY_PATH=/home/qyichao/test:$LD_LIBRARY_PATH

还是不行!!!

    2. 先是System.out.println("path: " + System.getProperty("java.library.path")); 把路径打出来

    3.把hellojni.so赋值到上面的一个路径,/usr/lib/中,再次运行java HelloJNI还是报这个错,找不到so

    。。。。。。。。。。。。。。。。


    4.看了好多博客,还是没解决,很奇怪,so明明复制到PATH,还是找不到。


---------
然后就没用System.loadLirary, 用system.load("so绝对路径"),就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值