Eclipse + CDT 实现JNI 的方法

时间:2023-01-24 22:05:21


因为某些算法要通过c++实现,因而只能在java下用jni的方法。

JNI 的介绍就略过了,大家都是清楚的,不清楚的可以自己百度之。

OS:ubuntu kylin 

eclipse: kepler-jee 4.3.2

eclipse 下下来后,发现打开木有菜单项= =查了一下才知道,据说是ubuntu的gnome功能和它冲突了,去论坛上搜了下,在桌面上建立个eclipse.desktop的文件,

输入

[Desktop Entry]

Type=Application
Name=Eclipse
Comment=Eclipse Integrated Development Environment
Icon=${eclipse_home}/icon.xpm
Exec=env UBUNTU_MENUPROXY= ${eclipse_home}/eclipse
其中${eclipse_home}是你自己下载的eclipse的安装路径

这样从这个快捷键打开eclipse,就木有问题了,可以看到菜单了,哈哈~~

要用eclipse实现c++编程,必须下载CDT插件,在help->install new softwares中输入CDT,下载,一路next就好。

好,安装好CDT后,就要开始JNI编程了

首先,建立一个java project,在其中输入

package test;

public class testjni
{
//声明自定义本地库方法接口
public native void displayTest() ;
//自定义加载本地库文件
static
{
System.loadLibrary("testjni");
}

public static void main(String [] args)
{
new testjni().displayTest();
}
}

然后就是要生成.h头文件了,这个jni的.h头文件,可以进入你定义的包的上一层目录下,用javah编辑,也可以用eclipse自己来实现

再external configuration tools中的program选项下新建一个 可以命名为javahEclipse + CDT 实现JNI 的方法

然后选中要编辑的java文件,点击Eclipse + CDT 实现JNI 的方法

然后再project 里refresh一下,就可以发现出现一个jni的文件夹,下面就是你要用的.h文件了

Eclipse + CDT 实现JNI 的方法

再新建一个C++ project,注意:项目类型要选择“shared library”,

将刚才生生成的test_testjni.h文件复制到下面,并新建一个cpp文件,

注意:将test_testjni.h文件移到新建的项目下 :

Eclipse + CDT 实现JNI 的方法

在输入# include <jni.h>时,会提示你头文件找不到,这时候在include下添加上jdk下javah的路径就可以了:

Eclipse + CDT 实现JNI 的方法

cpp的文件内容如下:

#include <jni.h>
#include "test_testjni.h"
#include <stdio.h>
#include <iostream>
using namespace std;


JNIEXPORT void JNICALL Java_test_testjni_displayTest
(JNIEnv *env, jobject obj)
{
printf("hello java,i am c!!!!");
return;
}
此时,点击build project会报错“relocation R_X86_64_32against `a local symbol' can not be used when making a sharedobject; recompile with........”,查了下,

在编译的时候必须加上-fPIC,对于使用makefile的朋友来说完全不是问题,只需在每个编译选项上加上-fPIC即可,像我这种比较懒得人来说,不知道在eclipse什

么地方加这一选择,查了半天资料,终于找到了,右键->properties->c/c++Build->Setting->Toolsetting->gcc c++compiler->optimization->otheroptimization

 flags,加上-fPIC即可。

最后,得到生成的.so文件

Eclipse + CDT 实现JNI 的方法


将生成的库文件放在原来的java项目下,新建一个文件夹lib,将.so文件放在下面,然后点击项目的properties,如图点选:

Eclipse + CDT 实现JNI 的方法





注意:将生成的.so文件放在lib文件夹下的时候,一定要改名,改成“lib+你在loadlibray中的名称.so”,否则,运行的时候会提示你库文件路径找不到好了,现在点击运行,结果就出来了,哈哈:Eclipse + CDT 实现JNI 的方法