Mac OS上Java用JNI调用C++

教程

进入到src目录下:
/src/company/test/TestNative.java
package com.company.test;

public class TestNative {
    public native void sayHello();
    public static void main(String[] args) {
//        System.setProperty("java.library.path", "../../../");
        System.out.println(System.getProperty("java.library.path"));
        System.loadLibrary("NativeCode");
        TestNative nativeCode = new TestNative();
        nativeCode.sayHello();
    }
}
编译:
javac ./com/company/test/TestNative.java
生成C++头文件:
javah -jni com.company.test.TestNative

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

#ifndef _Included_com_company_test_TestNative
#define _Included_com_company_test_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_company_test_TestNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_company_test_TestNative_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
然后写C++代码:jni_TestNativeImpl.cc
#include <jni.h>
#include "com_company_test_TestNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_company_test_TestNative_sayHello
(JNIEnv *env, jobject obj) {
    printf("From jni_helloworldImpl.cpp :");
    printf("Hello world ! \n");
    return;
}
然后编译获得:libNativeCode.jnilib
g++ -shared -I /System/Library/Frameworks/JavaVM.framework/Headers jni_TestNativeImpl.cc -o libNativeCode.jnilib
然后在src目录下:
java -Djava.library.path=. com.company.test.TestNative
输出:
.
From jni_helloworldImpl.cpp :Hello world !
或者:
java com.company.test.TestNative

注意:MacOS 上loadLibrary(“NativeCode”)加载的是libNativeCode.jnilib,后缀不是so而是jnilib。然后注意,headers的目录是/System/Library/Frameworks/JavaVM.framework/Headers 。如果用:
g++ -shared -I /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include jni_TestNativeImpl.cc -o libNativeCode.jnilib
就会报错:
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include/jni.h:45:10: fatal error:
      'jni_md.h' file not found


Android NDK开发


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值