Eclipse + CDT 实现JNI 的方法

来源:互联网 发布:网络赚钱项目有哪些 编辑:程序博客网 时间:2024/04/27 10:51


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

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

OS:ubuntu kylin 

eclipse: kepler-jee 4.3.2

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

输入

[Desktop Entry]Type=ApplicationName=EclipseComment=Eclipse Integrated Development EnvironmentIcon=${eclipse_home}/icon.xpmExec=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选项下新建一个 可以命名为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>#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文件



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






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


0 0
原创粉丝点击