Mac下用Java调用c/c++的思路详解
admin
2023-05-01 04:00:23
目录

    前言

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

    调用思路

    Java

    C/C++

    具体步骤

    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 
    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++内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!

    相关内容

    热门资讯

    北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
    春风一拂千山绿 春风轻拂千山绿... 新春对联欣赏1、天意无常顺子自然,万般皆苦唯有自渡。2、门迎百福吉星照,户纳千祥鸿运开。3、一门天赐...
    世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
    阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...