首页 > 软件开发 > ECLIPSE >

轻松使用Eclipse CDT进行Java JNI编程

来源:互联网 2023-03-17 00:11:34 90

Java程序可以通过JNI(Java Native Interface,Java本地调用)访问本地的动态链接库,从而扩展其功能、保护关键代码、提高运行效率。但对于初次接触JNI的童鞋来说,如何使用是很大的问题。本文通过Eclipse CDT(使用MinGW/gcc),利用JNI实现了一个简单的样例程序,供大家参考。cqI办公区 - 实用经验教程分享!

工具/原料

  • 装有CDT和JDT的Eclipse/MyEclipse,CDT安装方法见http://jingyan.baidu.com/article/380abd0a5888211d90192cd6.html/

方法/步骤

  • 1

    创建一个Java project

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    创建一个名为“JNI Test”的Java project,创建一个名为“com.example.jni.JNITest”的class,其内容如下。同时在该project下创建resources文件夹,用来存放动态库文件。cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    package com.example.jni;cqI办公区 - 实用经验教程分享!

    public class JNITest { cqI办公区 - 实用经验教程分享!

    static { cqI办公区 - 实用经验教程分享!

    // 调用文件名为JNI Library.dll的动态库 cqI办公区 - 实用经验教程分享!

    System.loadLibrary("libJNI Library"); cqI办公区 - 实用经验教程分享!

    } cqI办公区 - 实用经验教程分享!

    public static void main(final String[] args) {cqI办公区 - 实用经验教程分享!

    new JNITest().hello("world"); cqI办公区 - 实用经验教程分享!

    } cqI办公区 - 实用经验教程分享!

    // native方法声明 cqI办公区 - 实用经验教程分享!

    public native void hello(String name); cqI办公区 - 实用经验教程分享!

    } cqI办公区 - 实用经验教程分享!

  • 2

    根据Java类文件创建C 的头文件

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    在命令行下,进入Java项目的bin文件夹(例如cd G:\Users\K\workspace\JNI Test\bin)

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    执行javah com.example.jni.JNITest ,即可在bin目录下生成C 的头文件,其内容如下图。cqI办公区 - 实用经验教程分享!

    JNIEXPORT void JNICALL Java_com_example_jni_JNITest_hello(JNIEnv *, jobject, jstring)这个函数就是我们接下来要实现的。cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    如果提示javah命令不存在,说明JDK的bin目录未加入到系统环境变量Path中,请先进行添加。cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

  • 2本页面未经许可获取自百度经验
  • 3

    创建C 项目

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    创建名为“JNI Library”的C 项目,新建一个Cpp文件,在该文件中将实现头文件中声明的函数,其内容如下。此时编译器会提示代码有错,因为没有设置头文件包含路径,我们在下一步进行设置。cqI办公区 - 实用经验教程分享!

    #include iostream>cqI办公区 - 实用经验教程分享!

    #include "com_example_jni_JNITest.h"cqI办公区 - 实用经验教程分享!

    using namespace std;cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    JNIEXPORT void JNICALL Java_com_example_jni_JNITest_hello(JNIEnv *env,cqI办公区 - 实用经验教程分享!

    jobject jthis, jstring data) {cqI办公区 - 实用经验教程分享!

    jboolean iscopy;cqI办公区 - 实用经验教程分享!

    const char *charData = env->GetStringUTFChars(data, &iscopy);cqI办公区 - 实用经验教程分享!

    cout "Hello " charData endl;cqI办公区 - 实用经验教程分享!

    env->ReleaseStringUTFChars(data, charData);cqI办公区 - 实用经验教程分享!

    }cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

  • 4

    配置C 项目的头文件目录,使其包含jdk的头文件目录(具体目录请根据自己的JDK安装路径来)。cqI办公区 - 实用经验教程分享!

    配置方法:在左侧的“JNI Library”项目上右击,选择Properties -> C/C General -> Path and Symbols,按下图进行设置,点OK保存。

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

  • 5

    配置C 项目的链接参数,使JNI能够使用。具体每步都有截图。cqI办公区 - 实用经验教程分享!

    同样地,在左侧的“JNI Library”项目上右击,选择Properties。

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    (1)左侧点击 C/C Build/Settings,在MinGW C Linker/Miscellaneous/Linker Flags中添加的参数为“-Wl,--add-stdcall-alias”cqI办公区 - 实用经验教程分享!

    (2)在MinGW C Linker/Shared Library Settings中勾选SharedcqI办公区 - 实用经验教程分享!

    (3)在C/C Build/Settings的Build Steps选项页的Post-build Steps添加以下内容,这样C 项目Build完成后就会自动将动态库文件拷贝到JNI Test项目的resources文件夹。cqI办公区 - 实用经验教程分享!

    xcopy "${BuildArtifactFilePrefix}${BuildArtifactFileName}" "${workspace_loc:/JNI Test/resources/}" /Y

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    (4)在C/C Build/Settings的Build Arifact选项页中,设置Artifact Type为Shared LibrarycqI办公区 - 实用经验教程分享!

    (5)记得点OK保存哦。此时右击C 项目-> Build Project,应该会成功编译,并提示复制了1个文件(记得在在JNI Test这个Java项目下创建resources文件夹,这样才会复制成功哦)cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

  • 6

    运行Java项目“JNI Test”

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    (1)在Eclipse左侧右击“JNI Test”,Run as->Java Application即可,此时会提示有错,我们接下来就解决这个问题(一定要先尝试运行一次,即使出错)。cqI办公区 - 实用经验教程分享!

    (2)点击菜单Run -> Run Configurations,按下图设置参数,指定动态库位置。参数为 -Djava.library.path="${workspace_loc}/JNI Test/resources;${env_var:PATH}"cqI办公区 - 实用经验教程分享!

    (3)点击Run再次运行就会运行成功啦。cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    注意:如果还是出错,可以尝试将java代码中的System.loadLibrary("libJNI Library") 改为System.loadLibrary("JNI Library")cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

    轻松使用Eclipse CDT进行Java JNI编程cqI办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!cqI办公区 - 实用经验教程分享!


    标签: ECLIPSE

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码