资讯专栏INFORMATION COLUMN

Mac OS上编译JNI的动态库

付伦 / 782人阅读

摘要:在中加载的类库注意的动态库在上面的命名是文件,而在上面的命名是类库的名字需要加上也就是在上面动态库的名称应该是生成通过命令生成文件这样就可以生成了一个的文件。在中他所在的位置是使用编译就可以得到一个编译好的文件下面需要把文件打包成动态库。

JNIJava Native Interface的缩写,是为了在Java上能够调用本地语言尤其是Cc++设计的。 下面就看下如何在Mac OS上面如何使用JNI的调用C语言。 ##编写Java类 先定义一个Java

public class MacJni {

    public native void sayHello();

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

    public static void main(String[] args) {
        MacJni macJni = new MacJni();
        macJni.sayHello();

    }
}

这里定义了一个MacJni的类,在它的main函数中调用了定义的native的方法sayHello。 在static中加载native的类库macjni,注意JNI的动态库在linux上面的命名是.so文件,而在Mac OS上面的命名是.jnilib,类库的名字需要加上lib,也就是在Mac OS上面动态库的名称应该是libmacjni.jnilib

生成.class 通过命令生成.class文件: >javac MacJni.java

这样就可以生成了一个MacJni.class的文件。 ##生成.h文件 通过命令可以直接生成.class对应.h文件: >javah MacJni

生成了一个MacJni.h的文件。文件内容如下:

* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class MacJni */
#ifndef _Included_MacJni
#define _Included_MacJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     MacJni
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_MacJni_sayHello
  (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

该文件定义了一个方法Java_MacJni_sayHello,这个方法对应定义的native方法public native void sayHello();。 JNI在C语言中定义的规则是:Java_包名_类名_方法名

编写.c文件 根据定义.h方法,需要编写一个一个.c文件MacJni.c,用来实现.h中的方法
#include 
#include "MacJni.h"

JNIEXPORT void Java_MacJni_sayHello(JNIEnv * env, jobject obj){
    printf("hello from jni");
}

这个方法很简单就是打印一句话:hello from jni。 ##编译.c 在MacJni.h中有一句话 > #include

jni.h是jdk中C语言库的头文件,在编译.c的时候需要指定jni.h的所在。在Mac OX中他所在的位置是:

/System/Library/Frameworks/JavaVM.framework/Headers

使用gcc编译: > gcc -I/System/Library/Frameworks/JavaVM.framework/Headers -c MacJni.c

就可以得到一个编译好的文件MacJni.o,下面需要把.o文件打包成动态库。 ##打包动态库 使用gcc可以直接打包动态库 >gcc -dynamiclib -o libmacjni.jnilib MacJni.o

把.o文件打包成了libmacjni.jnilib,就可以通过Java调用C语言了。

java MacJni

hello from jni

源码地址:https://github.com/jjz/jni

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65605.html

相关文章

  • 在OpenSUSE上编安装sphinx扩展

    摘要:准备工作要在中安装扩展,你必须先安装好,笔者使用的是中文分词,因此我安装的是。配置修改文件,将添加到扩展选项部分。错误解决在安装的过程中,遇到一个比较二的错误。总结在下,很多时候安装和搜索依赖库的目录是不一致的,应当仔细检查。 准备工作 要在PHP中安装sphinx扩展,你必须先安装好sphinx,笔者使用的是中文分词,因此我安装的是coreseek。 如何安装coreseek请看:h...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

付伦

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<