您好,登錄后才能下訂單哦!
小編給大家分享一下Mac下如何使用Java調(diào)用c/c++,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
向量化執(zhí)行逐漸成為了列存數(shù)據(jù)庫(kù)優(yōu)化的熱門方向,而Java對(duì)向量化執(zhí)行的支持并不如c++,如果要想使用的話,通過(guò)JNI來(lái)實(shí)現(xiàn)可能更加合適。
Java
編寫(xiě)native的java方法并編譯為class文件
編譯為.h的頭文件
C/C++
使用C/C++實(shí)現(xiàn)本地方法
將本地方法生成動(dòng)態(tài)鏈接庫(kù)
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)上
編寫(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++”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(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)容。