GithubHelp home page GithubHelp logo

mynativecpp's Introduction

简介

MyNativeCpp是一个为项目MyNativeJava提供native方法的动态库工程。

使用环境

  • 环境 win7 64位系统
  • java: IDEA 2018.1 + jdk1.8
  • c++ : CLion 2018.2 + mingw-w64
  • 依赖库及文件
    • %JAVA_HOME%\lib\jvm.lib
    • %JAVA_HOME%\include;%JAVA_HOME%\include\jni.h
    • %JAVA_HOME%\include;%JAVA_HOME%\include\win32\jni_md.h

模块

  • jni概述
  • native接口文件
  • 动态库提供本地方法
  • java使用本地方法

jni概述

待补充

参考

native接口文件

include目录下javah生成的接口文件,具体操作参见native接口生成

接口文件会逐步更新,主要用于测试

#include <jni.h>
/* Header for class com_ft_mynative_MyNativeJava */

#ifndef _Included_com_ft_mynative_MyNativeJava
#define _Included_com_ft_mynative_MyNativeJava
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ft_mynative_MyNativeJava
 * Method:    fun
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_ft_mynative_MyNativeJava_fun
  (JNIEnv *, jobject);

/*
 * Class:     com_ft_mynative_MyNativeJava
 * Method:    fun2
 * Signature: (Ljava/lang/String;)I
 */
JNIEXPORT jint JNICALL Java_com_ft_mynative_MyNativeJava_fun2
  (JNIEnv *, jobject, jstring);

/*
 * Class:     com_ft_mynative_MyNativeJava
 * Method:    fun3
 * Signature: ([Ljava/lang/Integer;)V
 */
JNIEXPORT void JNICALL Java_com_ft_mynative_MyNativeJava_fun3
  (JNIEnv *, jobject, jobjectArray);

#ifdef __cplusplus
}
#endif
#endif

动态库提供本地方法

CLion生成动态库,jdk是64位,原本使用的Mingw是32位程序,生成的dll在64位java程序中不能使用, 又下载了mingw64,配置使CLion使用64位mingw,CLion使用CMake编译程序。

CMakeList.txt

cmake_minimum_required(VERSION 3.12)
project(MyNativeJava)

set(CMAKE_CXX_STANDARD 14)

set(INC_DIR D:/java/jdk1.8.0_192/include;D:/java/jdk1.8.0_192/include/win32;../include)
set(LINK_DIR D:/java/jdk1.8.0_192/lib)
set(SOURCE_FILES com_ft_mynative_MyNativeJava.cpp com_ft_mynative_MyNativeJava.h)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../../MyNativeJava")

include_directories(${INC_DIR})
link_directories(${LINK_DIR})
link_libraries(jvm jawt)

add_library(MyNativeJava SHARED com_ft_mynative_MyNativeJava.cpp com_ft_mynative_MyNativeJava.h)

生成的dll直接指定输出到MyNativeJava目录下,CMakeLists.txt中设置set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../../MyNativeJava"),需要MyNativeJava与MyNativeCpp放在一个目录下。 具体方法请参考源代码

java使用本地方法

详情参见java调用动态库

静态块加载dll

public class MyNativeJava {
    static {
        System.loadLibrary("libMyNativeJava");
    }
}

加载成功就可以使用native方法了,fun,fun2,fun3是测试用的几个方法,后续会加入更多内容,比如类成员修改,类方法执行等。 详情参见MyNativeJava.java

public class MyNativeJava {
    static {
        System.loadLibrary("libMyNativeJava");
    }

    private native void fun();
    private native int fun2(String s);
    private native void fun3(Integer[] ia);

    public static void main(String[] args) {
        MyNativeJava nativeHello = new MyNativeJava();
        nativeHello.fun();
        System.out.println(nativeHello.fun2("hello, tom"));
        nativeHello.fun3(new Integer[]{3, 5});
    }
}

mynativecpp's People

Contributors

feifa168 avatar feitian168 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

daiedaie

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.