博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个JNI的helloworld小demo
阅读量:6770 次
发布时间:2019-06-26

本文共 2052 字,大约阅读时间需要 6 分钟。

     最近想学习一下jni,在网上看了一些demo,自己也操作了一遍,首先我将我自己学习的demo网站贴出来:https://blog.csdn.net/lwcloud/article/details/78326903

         为了方便阅读我也将代码贴出来,这篇的主要目的是为了记录我在学习的时候遇到的坑,

       首先:java代码

package test;public class HelloWorld {   //静态代码块,加载c++dill文件    static {        System.loadLibrary("HelloWorld");    }    //构造方法    public HelloWorld() {    }    //定义方法    public native int init(int lPort);        public native void print(String str);}

第二个是测试代码,都比较简单

 

package test;public class Test {    public static void main(String[] args) {        HelloWorld hw = new HelloWorld();        hw.print("Hello World!");         int number=hw.init(123);        System.out.println(number);    }}

值得一说的就是生成c++ 这一过程,首先我是学java的c++一窍不通,哈哈,花了几个小时才安装好软件出现一个helloworld,

   1.cd到工作空间的 src 目录,使用javac命令编译一下HelloWorld文件,然后 使用javah,命令生成一个HelloWorld.h文件,这个东西比较关键

   2.新建一个c++,HelloWorld项目,主要是用来编译生成dill文件的,我们将HelloWorld.h文件,还有 JAVA_HOME\jdk1.6.0_17\include\jni.h  ,JAVA_HOME\jdk1.6.0_17\include\win32\jni_md.h,这两个文件一并放入工程中。

   3.修改HelloWorld.cpp,文件内容如下

        

// HelloWorld.cpp : Defines the entry point for the DLL application.//  #include "stdafx.h" #include "HelloWorld.h" /* * Class:     HelloWorld * Method:    init * Signature: (I)I */JNIEXPORT jint JNICALL Java_HelloWorld_init(JNIEnv *env, jobject job, jint lPort){     int number=10;     number+=lPort;     return number; } /* * Class:     HelloWorld * Method:    print * Signature: (Ljava/lang/String;)V */JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject job, jstring str){    printf("%d\n", str);}

 4.编译,会在工程的debug文件夹中生成想要的Helloworld.dill文件

5.这一步就是将生成Helloworld.dill放到java工程的lib中,然后build path将lib配置成,native library目录,然后运行即可

上面是简单的步骤,下面来盘点一下我遇到的大坑,

 1.最感人的就是,c++ 6.0生成的是 32位dill文件,你的jdk要是64位的那恭喜你,重新来吧,,换成vusial studio 2005,使用生成,重新弄成64位的,没事加深一下印象,哈哈哈;

 2.第二个就是工具的文件路径问题,报的忘记记录了,具体原因是include 文件加配置的错误,需要在选项 ——目录——s目录——includeFile 里修改一下

3.就是头文件报错,这个东西 #include "stdafx.h"一定要加,我没学过c++,不了解太多就不多哔哔了,其中引用方式也特使#include "stdafx.h"表示在当前目录中找,#include <stdafx.h>表示在整个库中查找,这就要注意将helloworld里的引用改一下#include "jni.h"这样

 

转载于:https://www.cnblogs.com/fmlyzp/p/10392127.html

你可能感兴趣的文章
无法阻止的Facebook:成立10年来仍保持高速增长
查看>>
部署软件定义网络你需要考虑的10件事
查看>>
搭载YunOS的互联网汽车 不单单只是会上网那么简单
查看>>
苹果:高通不能二次收费 买了芯片就不该要专利费
查看>>
郑明媚:智慧城市建设需回归理性
查看>>
错过Win10免费升级?别急,还有一次机会
查看>>
《 嵌入式系统设计与实践》一一导读
查看>>
智能家居与单词“Echo”的50年情缘
查看>>
腾讯与华为数据之争谈物联网大数据发展之困
查看>>
CNCC 2016 | 山世光:深度化的人脸检测与识别技术—进展与展望
查看>>
Snapchat如何突出重围?
查看>>
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
查看>>
《高性能Linux服务器构建实战》——1.1节什么是Nginx
查看>>
从历史上的错误数据中吸取教训
查看>>
新加坡零售企业Decks采用RFID技术管理库存及交易过程
查看>>
Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)
查看>>
探访中缅边境的大数据管理局
查看>>
Mozilla宣布彻底停止Firefox OS的开发
查看>>
作用明显 智能交通中视频监控系必不可少
查看>>
浪潮和思科联合 华为、新华三怎么看?
查看>>