Mac下Java JNI (java native interface)調C

來源:互聯網
上載者:User

標籤:imp   main   動態   ++   attr   執行   virtual   content   其他   

1.編寫帶有native聲明的方法的Java類

2.使用javac命令編譯編寫的Java類

3.使用java -jni className 來產生尾碼名為.h的標頭檔

4.使用其他語言(C、C++)實現本地方法

5.將本地方法編寫的檔案產生動態連結程式庫

 

一代碼:(不要帶包路徑)

/**
* native-0study
*
* @author xuedui.zhao
* @create 2018-04-23
*/
public class HelloWorld {
public native void hello();

static{
System.loadLibrary("hello");
}

public static void main(String[] args){

new HelloWorld().hello();
}
}

二:

在終端執行 : javac HelloWorld.java

這時會產生HelloWorld.class 檔案

三:使用java -jni className 產生尾碼名為.h的標頭檔

     

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

四:建立 HelloWorldImpl.c 檔案

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
printf("Hello World!\n");
return;
}

五:將本地方法編寫的檔案產生動態連結程式庫

gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib
此時會拋出異常:

HelloWorldImpl.c:1:10: fatal error: ‘jni.h‘ file not found
#include "jni.h"
^~~~~~~
1 error generated.

六:sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include

七:ls -al

      drwxr-xr-x 7 xuedui.zhao staff 224 4 23 21:35 .

     drwxr-xr-x 9 xuedui.zhao staff 288 4 23 11:52 ..

     -rw-r--r-- 1 xuedui.zhao staff 442 4 23 14:07 HelloWorld.class
     -rw-r--r-- 1 xuedui.zhao staff 377 4 23 14:07 HelloWorld.h
     -rw-r--r-- 1 xuedui.zhao staff 276 4 23 14:06 HelloWorld.java
    -rw-r--r-- 1 xuedui.zhao staff 170 4 23 21:27 HelloWorldImpl.c
    -rwxr-xr-x 1 xuedui.zhao staff 8400 4 23 21:35 libhello.jnilib

八:終端執行 : java HelloWorld

     Hello World!

Mac下Java JNI (java native interface)調C

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.