Mac下用Java調(diào)用c/c++的思路詳解
前言
向量化執(zhí)行逐漸成為了列存數(shù)據(jù)庫優(yōu)化的熱門方向,而Java對向量化執(zhí)行的支持并不如c++,如果要想使用的話,通過JNI來實現(xiàn)可能更加合適。
調(diào)用思路
Java
- 編寫native的java方法并編譯為class文件
- 編譯為.h的頭文件
C/C++
- 使用C/C++實現(xiàn)本地方法
- 將本地方法生成動態(tài)鏈接庫
具體步驟
Java
1.編寫native的java方法并編譯為class文件
這步是Java初學(xué)者都熟悉的,正常編寫編譯即可
public class HelloWorld { public native void hello(); static { //設(shè)置查找路徑為當(dāng)前項目路徑 System.setProperty("java.library.path", "."); //加載動態(tài)庫的名稱 System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().hello(); } }
javac HelloWorld.java
生成HelloWorld.class
文件
javac找不到的話,寫絕對路徑或者添加環(huán)境變量
2.編譯為.h的頭文件javah HelloWorld生成HelloWorld.h
native的方法需要通過頭文件和c++的實現(xiàn)方法關(guān)聯(lián)上
C/C++
編寫native方法的實現(xiàn)方法
#include "jni.h" #include "HelloWorld.h" // 將生成的頭文件引入 #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){ //函數(shù)簽名需和頭文件中的相對應(yīng) printf("Hello World!\n"); return; }
根據(jù)文件生成動態(tài)鏈接庫
#/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的代碼中是否加載了連接庫
到此這篇關(guān)于Mac下用Java調(diào)用c/c++的方法的文章就介紹到這了,更多相關(guān)Java調(diào)用c/c++內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 人工智能開發(fā)語言排行榜: 不死Java, 不朽C/C++, 新貴Python【推薦】
- Java通過調(diào)用C/C++實現(xiàn)的DLL動態(tài)庫——JNI的方法
- JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼
- Android JNI c/c++調(diào)用java的實例
- C/C++在Java、Android和Objective-C三大平臺下實現(xiàn)混合編程
- 如何批量清理系統(tǒng)臨時文件(語言:C#、 C/C++、 php 、python 、java )
- C/C++和Java的交互詳解
- java和c/c++ 數(shù)據(jù)類型長度的比較
- C/C++與Java各數(shù)據(jù)類型所占字節(jié)數(shù)的詳細(xì)比較
相關(guān)文章
Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器
這篇文章主要介紹了Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器的相關(guān)資料,需要的朋友可以參考下2017-06-06初識sa-token及登錄授權(quán)簡單實現(xiàn)
這篇文章主要為大家介紹了sa-token及登錄授權(quán)簡單實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07