JNI 的介绍就略过了,大家都是清楚的,不清楚的可以自己百度之。
OS:ubuntu kylin
eclipse: kepler-jee 4.3.2
eclipse 下下来后,发现打开木有菜单项= =查了一下才知道,据说是ubuntu的gnome功能和它冲突了,去论坛上搜了下,在桌面上建立个eclipse.desktop的文件,
输入
[Desktop Entry]其中${eclipse_home}是你自己下载的eclipse的安装路径
Type=Application
Name=Eclipse
Comment=Eclipse Integrated Development Environment
Icon=${eclipse_home}/icon.xpm
Exec=env UBUNTU_MENUPROXY= ${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选项下新建一个 可以命名为javah
然后选中要编辑的java文件,点击
然后再project 里refresh一下,就可以发现出现一个jni的文件夹,下面就是你要用的.h文件了
再新建一个C++ project,注意:项目类型要选择“shared library”,
将刚才生生成的test_testjni.h文件复制到下面,并新建一个cpp文件,
注意:将test_testjni.h文件移到新建的项目下 :
在输入# include <jni.h>时,会提示你头文件找不到,这时候在include下添加上jdk下javah的路径就可以了:
cpp的文件内容如下:
#include <jni.h>此时,点击build project会报错“relocation R_X86_64_32against `a local symbol' can not be used when making a sharedobject; recompile with........”,查了下,
#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;
}
在编译的时候必须加上-fPIC,对于使用makefile的朋友来说完全不是问题,只需在每个编译选项上加上-fPIC即可,像我这种比较懒得人来说,不知道在eclipse什
么地方加这一选择,查了半天资料,终于找到了,右键->properties->c/c++Build->Setting->Toolsetting->gcc c++compiler->optimization->otheroptimization
flags,加上-fPIC即可。
最后,得到生成的.so文件
将生成的库文件放在原来的java项目下,新建一个文件夹lib,将.so文件放在下面,然后点击项目的properties,如图点选:
注意:将生成的.so文件放在lib文件夹下的时候,一定要改名,改成“lib+你在loadlibray中的名称.so”,否则,运行的时候会提示你库文件路径找不到好了,现在点击运行,结果就出来了,哈哈: