Linux下生成so,使用JNI调用C/C++程序

以com.company.JniLib.java文件为例

package com.company;
public class JniLib {

    public native void setFlagStr(String str);

    public native String getFlagStr();

}
第一步,生成头文件,必须要把这个java文件放到com/company的目录下,然后再在根目录下编译
javah -classpath . com.company.JniLib.java 

第二步,编写com_company_JniLib.c文件

#include<stdio.h>
#include<jni.h>
#include "com_company_JniLib.h"
const char * str;
JNIEXPORT void JNICALL Java_com_company_JniLib_setFlagStr(JNIEnv * env, jobject j, jstring s)
{
	str = (*env)->GetStringUTFChars(env, s, 0);;
}
JNIEXPORT jstring JNICALL Java_com_company_JniLib_getFlagStr(JNIEnv * env, jobject j)
{
	return  (*env)->NewStringUTF(env, str);
}

第三步,编译生成so文件

gcc -fPIC -I /usr/java/include -I /usr/java/include/linux -c com_company_JniLib.c
gcc -shared com_company_JniLib.o -o jnilib.so

第四步,程序中调用so文件

public class Main {

    static {
        System.load("/root/jni/jnilib.so");
    }

    public static void main(String[] args) {
        JniLib lib = new JniLib();
        lib.setFlagStr("值1000大洋的“hello world”!");
        System.out.println(lib.getFlagStr());
    }

}

程序需要在linux下才能运行,打包成jar,执行效果如下:



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值