溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mac下如何使用Java調(diào)用c/c++

發(fā)布時(shí)間:2021-08-10 09:04:20 來(lái)源:億速云 閱讀:196 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Mac下如何使用Java調(diào)用c/c++,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

向量化執(zhí)行逐漸成為了列存數(shù)據(jù)庫(kù)優(yōu)化的熱門方向,而Java對(duì)向量化執(zhí)行的支持并不如c++,如果要想使用的話,通過(guò)JNI來(lái)實(shí)現(xiàn)可能更加合適。

調(diào)用思路

Java

  1. 編寫(xiě)native的java方法并編譯為class文件

  2. 編譯為.h的頭文件

C/C++

  1.  使用C/C++實(shí)現(xiàn)本地方法

  2. 將本地方法生成動(dòng)態(tài)鏈接庫(kù)

具體步驟

Java

1.編寫(xiě)native的java方法并編譯為class文件

這步是Java初學(xué)者都熟悉的,正常編寫(xiě)編譯即可

public class HelloWorld {

    public native void hello();

    static {
        //設(shè)置查找路徑為當(dāng)前項(xiàng)目路徑
        System.setProperty("java.library.path", ".");
        //加載動(dòng)態(tài)庫(kù)的名稱
        System.loadLibrary("hello");
    }

    public static void main(String[] args) {
        new HelloWorld().hello();
    }
}

javac HelloWorld.java生成HelloWorld.class 文件

javac找不到的話,寫(xiě)絕對(duì)路徑或者添加環(huán)境變量

2.編譯為.h的頭文件javah HelloWorld生成HelloWorld.h
native的方法需要通過(guò)頭文件和c++的實(shí)現(xiàn)方法關(guān)聯(lián)上

Mac下如何使用Java調(diào)用c/c++ 

C/C++

編寫(xiě)native方法的實(shí)現(xiàn)方法

#include "jni.h"
#include "HelloWorld.h" // 將生成的頭文件引入
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
	//函數(shù)簽名需和頭文件中的相對(duì)應(yīng)
    printf("Hello World!\n");
    return;
}

根據(jù)文件生成動(dòng)態(tài)鏈接庫(kù)

#/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

最后就可以正常運(yùn)行Java代碼了

運(yùn)行失敗了的話,注意檢查Java的代碼中是否加載了連接庫(kù)

Mac下如何使用Java調(diào)用c/c++

以上是“Mac下如何使用Java調(diào)用c/c++”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI