Eclipse基于CDT构建64位的JNI调用

首先要完成 Eclipse中 C/C++环境配置,请参考我的前一篇博客,“64位 win10下Eclipse C/C++环境配置”

然后再构建JNI应用。

在构建JNI应用中,主要参考下面这篇博客,原文为英文,我将其翻译为中文,同时将原文中几点错误的地方做了修改。

http://www.bogotobogo.com/cplusplus/eclipse_CDT_JNI_MinGW_64bit.php

1.创建Java Project

    1.1)创建一个新的Java项目(HelloJNI)

    1.2) 在该Java项目中新建一个Java类文件 HelloJNI.java

public class HelloJNI 
{
   static {
      // hello.dll on Windows or libhello.so on Linux
      System.loadLibrary("hello"); 
   }
   private native void sayHello();
 
   public static void main(String[] args) {
      // invoke the native method
      new HelloJNI().sayHello();  
   }
}

2.将该Java项目转换为C/C++项目

    2.1)右键点击 HelloJNI Java project-->new-->Other...

      --->C/C++--->Convert to a C/C++ project(Adds C/C++ nature)-->Next

    2.2) 在弹出的 "Convert to C/C++ project"对话框中,在“Project type”中选择 

     “Makefile Project”--> 在Toolchains中选择"MinGw GCC",然后finish.

    

    2.3)到现在,我们既可以作为JAVA项目来运行该项目,也可以作为C/C++项目来运行它。

3.产生C/C++头文件

    3.1)  在项目中创建一个“jni”文件夹来存放 C/C++代码。

            右键点击项目   ---->New--->Folder. 命名为  jni.

    3.2)   在“jni”文件夹中创建一个 "makefile"文件

              右键点"jni"文件夹--->new--->File,在文件名中,输入文件名  "makefile",然后 finish

                                     

    3.3)在makfile文件中输入如下代码。由于是makefile文件,文中的空格 为 “Tab”键,不是“Space”

     

# Define a variable for classpath
CLASS_PATH = ../bin

# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)

# $* matches the target filename without the extension
HelloJNI.h : HelloJNI.class
	javah -classpath $(CLASS_PATH) $*

该makefile文件用来生成一个"HelloJNI.h"的目标文件,其依存于"HelloJNI.class",同时调用javah来生成。

右键点击  "jni'文件夹--->build target--->create...在弹出的菜单中,输入文件名 "HelloJNI.h",然后点击OK

                                        

    3.4)运行 makefile文件,生成  "HelloJNI.h"

    右键点击"jni"文件夹--->make targets-->build......---->"HelloJNI.h"--->Build

    注意要确保保存了前面的文件(HelloJNI.java 和 makefile)

     将成功生成"HelloJNI.h"文件,其存储在“jni”文件夹中。


                                

4、生成 C文件---HelloJNI.c

    4.1)创建“HelloJNI.c”的C文件

     右键点击“jni”文件夹--->New---->Source file, 输入“HelloJNI.c”文件名

      在文件中,输入如下代码:

       

#include <jni.h>
#include <stdio.h>
#include "HelloJNI.h"
 
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) 
{
   printf("Hello World!\n");
   return;
}

    tips:有可能提示找不到jni.h文件,则将JAVA_HOME目录下的jni.h文件拷贝到 HelloJNI项目的"jni"目录下即可

       然后修改为  #include "jni.h"

    4.2)修改"makefile"文件,用来生成共享动态链接库文件 "hello.dll"

# Define a variable for classpath
CLASS_PATH = ../bin

# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)

all : hello.dll

# $@ matches the target, $< matches the first dependancy
hello.dll : HelloJNI.o
	gcc -m64 -Wl,--add-stdcall-alias -shared -o $@ $<

# $@ matches the target, $< matches the first dependancy
HelloJNI.o : HelloJNI.c HelloJNI.h
	gcc -m64 -I"C:\Program Files\Java\jdk1.7.0_21\include" -c $< -o $@

# $* matches the target filename without the extension
HelloJNI.h : HelloJNI.class
	javah -classpath $(CLASS_PATH) $*

clean :
	rm HelloJNI.h HelloJNI.o hello.dll

    4.3)右键点击"jni"文件夹---->Make Targets--->Create....

          在弹出的对话框中输入文件名"all"; 

          重复该过程,创建目标文件  "clean"

    4.4)运行目标文件“all”:  右键点击“jni”文件夹---->Make Targets--->Build....

          选择 Target--->all---->Build

            


    4.5)动态链接库文件"Hello.dll"将被创建,如下:

                   

5、最后,运行Java JNI程序

    5.1)最后我们需要给"hello.dll"指明   library的路径,可以通过VM 参数指明

     右键点击项目--->Run AS--->Run Configurations

      a)在  "Main"面板中,在Main class中输入  "HelloJNI"

       b)在"Arguments"面板中,输入"-Djava.library.path=jni"

      

    5.2)运行该项目,Bingo....


    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值