Mac下用Java調用c/c++的思路詳解
前言
向量化執行逐漸成為瞭列存數據庫優化的熱門方向,而Java對向量化執行的支持並不如c++,如果要想使用的話,通過JNI來實現可能更加合適。
調用思路
Java
- 編寫native的java方法並編譯為class文件
- 編譯為.h的頭文件
C/C++
- 使用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 <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++內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java調用C++程序的實現方式
- 詳解JNI到底是什麼
- windows下vscode+vs2019開發JNI的示例
- Java 中 Class Path 和 Package的使用詳解
- Java中的Native方法