目录
    • java
    • c/c++

前言

向量化执行逐渐成为了列存数据库优化的热门方向,而java对向量化执行的支持并不如c++,如果要想使用的话,通过jni来实现可能更加合适。

调用思路

java

  1. 编写native的java方法并编译为class文件
  2. 编译为.h的头文件

c/c++

  1.  使用c/c++实现本地方法
  2. 将本地方法生成动态链接库

具体步骤

java

1.编写native的java方法并编译为class文件

这步是java初学者都熟悉的,正常编写编译即可

public class helloworld {

    public native void hello();

    static {
        //设置查找路径为当前项目路径
        system.setproperty("java.library.path", ".");
        //加载动态库的名称
        system.loadlibrary("hello");
    }

    public static void main(string[] args) {
        new helloworld().hello();
    }
}

javac helloworld.java生成helloworld.class 文件

javac找不到的话,写绝对路径或者添加环境变量

2.编译为.h的头文件javah helloworld生成helloworld.h
native的方法需要通过头文件和c++的实现方法关联上

 

c/c++

编写native方法的实现方法

#include "jni.h"
#include "helloworld.h" // 将生成的头文件引入
#include <stdio.h>
jniexport void jnicall java_helloworld_hello(jnienv *env,jobject obj){
	//函数签名需和头文件中的相对应
    printf("hello world!\n");
    return;
}

根据文件生成动态链接库

#/bin/bash
export java_home=`/usr/libexec/java_home`
echo $java_home
gcc -dynamiclib -i $java_home/include -i $java_home/include/darwin helloworldimpl.c -o libhello.jnilib

最后就可以正常运行java代码了

运行失败了的话,注意检查java的代码中是否加载了连接库

到此这篇关于mac下用java调用c/c++的方法的文章就介绍到这了,更多相关java调用c/c++内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!