linux环境下 java调用c++的shared library(环境安装以及代码书写流程)

来源:互联网 发布:尚观linux视频 百度云 编辑:程序博客网 时间:2024/06/05 14:21

一:环境准备工作

    安装的系统以及软件:Linux、Windown\win7 、JDK、Eclipse C++、GCC、MinGW

1.开发环境上安装JDK

2.下载Eclipse C++

  下载地址: http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/junosr1 

    进行解压

3.下载MinGW

     http://sourceforge.net/projects/mingw/files/    下载mingw-get-setup.exe

      进行安装(安装步骤可以在网上找到)
      安装完成后,设置环境变量:计算机—高级系统设置——环境变量—系统变量—在Path变量的最前面加上 C:\MinGW\bin;
      打开C:\MinGW\bin,将mingw32-make.exe重命名为make.exe
      cmd,敲入命令make,如出现下图则表示MinGW安装成功
      

4.GCC在linux上的安装

       登录linux系统后,首先确认是否安装了gcc,使用命令: gcc --version

       如果出现了

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

       则说明系统已默认安装了gcc

       如果未出现上述文字,则需要安装gcc,使用命令:$sudo apt-get install build-essential 

二:验证环境是否安装正常

    运行Eclipse C++,选择菜单:File—New—C++ Project

    

     点击Finish;

     右击项目  Make Targets—Create,target name为hello,点击ok

   右击项目 Make Targets—Build,选中hello,点击build,出现如下图则表示build成功


        打开cpp文件hello.cpp,在工作区域右击 Run as—Local C/C++ Application,在console控制台即可出现”!!!Hello World!!!“

以上步骤成功后,则表示C++开发环境搭建成功!

三:开发c++ shared library

1.将jni.h、jni_md.h(来自linux jdk目录下[/usr/jdk1.7_64/include])添加至C:\MinGW\include

2.打开Eclipse C++,File—New—C++ Project—Shape Library—Empty Project,toolchains选择 MinGW GCC.

3.新建class,编写cpp文件

文件内容:cpp文件

#include "JNITest.h"
#include "jni.h"
#include "stdio.h"
JNIEXPORT void JNICALL
      Java_JNITest_print(JNIEnv *env,jobject obj, jstring content)
{
printf("hello-------");
    return;
}

2.编写头文件

#include <jni.h>
#ifndef  _Included_JNITest
#define _Included_JNITest

#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_JNITest_print
  (JNIEnv *, jobject, jstring);


#ifdef __cplusplus
}
#endif
#endif

编写完后,点击build项目,在项目的debug目录下生成了.o和dll文件,即表示编译成功。

3.编写java文件

public class JNITest
{
    public static void main(String[] args)
    {
        //System.out.println(System.getProperty("java.library.path"));
        JNITest jniTest = new JNITest();
        jniTest.print();
    }
    
    static
    {
        System.loadLibrary("jnitest");
    }
    
    public native void print();
}


4.linux运行cpp文件
将cpp文件上传至linux服务器上,使用命令生成.so文件
  gcc -shared -fPIC -o  libjnitest.so JNITest.c
在目录下可以查看到有对应的libjnitest.so文件
5.linux运行java文件
将生成的libjnitest.so文件放入java library path
如果不知道path,则可先在java的main函数中将path输出[System.out.println(java.library.path)]
将java文件上传至linux服务器上,使用命令
javac JNITest.java 将java文件编译成class文件
javah -jni JNITest 将class文件编译成头文件
java JNITest运行java文件

如果看到输出    "hello-------”则表示java调用c++在linux上运行正常。

    

    

0 0
原创粉丝点击