zoukankan      html  css  js  c++  java
  • eclipse调用jni

    http://blog.chinaunix.net/uid-27003388-id-3235189.html

    1.       在Eclipse里创建一个Java project(jni_test);

    在src里创建一个package,取名为jni;

    然后在jni里创建一个带有native声明的方法的java类(helloworld.java),文件具体内容如下:

    package jni;

     

    public class helloworld {

        static{

            System.loadLibrary("helloworld");

        }

     

        public native void dispHelloWorld();

        /**

         @param args

         */

        public static void main(String[] args) {

            // TODO Auto-generated method stub

            //System.getProperty("java.library.path");

            new helloworld().dispHelloWorld();

        }

     

    }

    Eclipse工程树形图如下:

    2.生成JNI头文件

     在命令行里,cd到Java工程(jni_test)的src目录,例如:

     cd E:workspacejni_testsrc

    然后执行javah -jni jni.helloworld(package不要漏掉)

    生成的jni_helloworld.h文件如下

    /* DO NOT EDIT THIS FILE - it is machine generated */

    #include <jni.h>

    /* Header for class jni_helloworld */

    #ifndef _Included_jni_helloworld

    #define _Included_jni_helloworld

    #ifdef __cplusplus

    extern "C" {

    #endif

    /*

     * Class:     jni_helloworld

     * Method:    dispHelloWorld

     * Signature: ()V

     */

    JNIEXPORT void JNICALL Java_jni_helloworld_dispHelloWorld

      (JNIEnv *, jobject);

    #ifdef __cplusplus

    }

    #endif

    #endif

    Eclipse工程树形图更新如下:

    3.       在Java工程(jni_test)的src目录创建jni_helloworldImp.cpp,实现jni_HelloWorld.h中的函数,这里请注意函数名,cpp里的函数名跟h文件的函数名要一致。

       jni_helloworldImp.cpp内容如下:

      

    #include <jni.h>

    #include "jni_helloworld.h"

    #include <stdio.h>

    JNIEXPORT void JNICALL Java_jni_helloworld_dispHelloWorld

    (JNIEnv *env, jobject obj)

    {

        printf("Hello world ! ");

        return;

    }

    Eclipse工程树形图更新如下:

    4.       在Java工程(jni_test)的src目录编译jni_HelloWorldImp.cpp产生dll,

    在控制台下>cl -LD jni_HelloWorldImp.cpp -Fehelloworld.dll,
    以上命令的参数中,-LD表示产生dll,-Fe后面表示产生dll的名字,具体的参数可以自己用cl -help命令查看, 
    如果成功编译,会产生helloworld.dll, helloworld.lib, helloworld.exp,

    以及jni_HelloWorldImp.obj四个文件。

    Eclipse工程树形图更新如下:

      

       这个过程中可能会遇到如下问题:

       <1>. CL不是内部命令,解决方法:

    在系统环境变量的path里加上VC-BIN路径,

           C:Program FilesMicrosoft Visual StudioVC98Bin

           C:Program FilesMicrosoft Visual StudioCommonMSDev98Bin

       <2>. fatal error C1083: Cannot open include file: 'jni.h': No such file or directory

           解决方法:

           拷贝%java_home%includejni.h

    %java_home%includewin32jawt_md.h  

    %java_home%includewin32jni_md.h 

           到VC-INCLUDE目录(C:Program FilesMicrosoft Visual StudioVC98Include),

           注:java_home指的是你的JDK目录。

          

           将VC-INCLUDE目录添加到系统环境变量,新增一个INCLUDE变量,

           变量值为:C:Program FilesMicrosoft Visual StudioVC98Include

       <3>. LINK : fatal error LNK1104: cannot open file "LIBCMT.lib"

           解决方法:

           将VC-LIB目录添加到系统环境变量,新增一个LIB变量,

           变量值为:C:Program FilesMicrosoft Visual StudioVC98Lib

    5.       设置jni_test工程的lib路径,也就是将helloworld.dll的路径添加到工程的lib路径;

    具体方法是:

    右击项目名à选择属性propertiesà在左边列表内选择“Java Build Path”à在右边选项卡用选择“source”à点开项目名前的“+”号,选择“Native library location”,“Edit”选择路径。(当然如果将dll拷贝到workspace下也可以用相对路径。也可右击“src”设定其properties内Native Library项。)

    6.       运行jni_test工程,run as java application,Console输出Hello world !

    如图:

  • 相关阅读:
    PHP服务器端API原理及示例讲解(接口开发)
    Nginx的启动、停止与重启
    还是,Stairway To Haven
    NetBeans 时事通讯(刊号 # 42 Jan 20, 2009)
    Eve Backstory
    将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
    Eve Backstory
    将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
    领域驱动设计和开发实战
    领域驱动设计和开发实战
  • 原文地址:https://www.cnblogs.com/kobe8/p/3972130.html
Copyright © 2011-2022 走看看