Mac下用Java调用c/c++的思路详解

 更新时间:2021年08月09日 14:59:31   作者:JiajunBernoulli  
这篇文章主要介绍了Mac下用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++内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis逆向工程运行代码实例

    Mybatis逆向工程运行代码实例

    这篇文章主要介绍了Mybatis逆向工程运行代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring中@Value使用详解及SPEL表达式

    Spring中@Value使用详解及SPEL表达式

    这篇文章主要介绍了Spring中@Value使用详解及SPEL表达式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 关于mybatis if else if 条件判断SQL片段表达式取值和拼接问题

    关于mybatis if else if 条件判断SQL片段表达式取值和拼接问题

    这篇文章主要介绍了mybatis if else if 条件判断SQL片段表达式取值和拼接,文章通过自己真实使用的例子给大家详细介绍,需要的朋友可以参考下
    2021-09-09
  • Springboot启动扩展点超详细教程小结

    Springboot启动扩展点超详细教程小结

    这篇文章主要介绍了Springboot启动扩展点超详细教程小结,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 简单了解Spring IoC相关概念原理

    简单了解Spring IoC相关概念原理

    这篇文章主要介绍了简单了解Spring IoC相关概念原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Spring Boot  Excel文件导出下载实现代码

    Spring Boot Excel文件导出下载实现代码

    这篇文章带领我们直接实现Excel文件的直接导出下载,后续开发不需要开发很多代码,直接继承已经写好的代码,增加一个Xml配置就可以直接导出。具体实现代码大家跟随小编一起通过本文学习吧
    2018-11-11
  • java学习笔记_关于字符串概述

    java学习笔记_关于字符串概述

    下面小编就为大家带来一篇java学习笔记_关于字符串概述。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 解决若依pageHelper在动态切换数据源问题

    解决若依pageHelper在动态切换数据源问题

    这篇文章主要介绍了解决pageHelper在动态切换数据源问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Jenkins+Maven+SVN自动化部署java项目

    Jenkins+Maven+SVN自动化部署java项目

    这篇文章主要介绍了Jenkins+Maven+SVN自动化部署java项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 深入理解 Java、Kotlin、Go 的线程和协程

    深入理解 Java、Kotlin、Go 的线程和协程

    这篇文章主要介绍了深入理解 Java、Kotlin、Go 的线程和协程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论