java调用c 图形程序_java调用c程序简单调用(2)

Main.java文件

package com.zero_waring.jni_test;

public class Main {

static {

System.loadLibrary("hello"); // libhello.so

}

private native void sayHello();

public static void main(String[] args) {

// write your code here

new Main().sayHello();

}

}

生成对应.h

javah -classpath ~/IdeaProjects/JniTest/src com.zero_waring.jni_test.Main

编写JNICppImpl.h文件

#ifndef _JNI_CPP_IMPL_

#define _JNI_CPP_IMPL_

#ifdef __cplusplus

extern "C" {

#endif

void sayHello();

#ifdef __cplusplus

}

#endif

#endif

因为要被c调用所以使用extern c

编写JNICppImpl.cpp文件

#include

#include "JNICppImpl.h"

void sayHello() {

std::cout << "this is jni" << std::endl;

}

编译要被java侧调用的com_zero_waring_jni_test_Main.c

#include

#include "com_zero_waring_jni_test_Main.h"

#include "JNICppImpl.h"

JNIEXPORT void JNICALL Java_com_zero_1waring_jni_1test_Main_sayHello (JNIEnv *env, jobject thisObj) {

sayHello(); // invoke C++ function

return;

}

编译生成so

g++ -fPIC -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -I ./ -shared com_zero_waring_jni_test_Main.c JNICppImpl.cpp -o libhello.so

添加so 库

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

可以看到当前目录下生成libhello.so

添加对应lib文件到java路径

JVM的java.library.path属性即为环境变量Path指定的目录

因为编译我们依赖了IntelliJ IDEA,所以要添加对应动态库路径

点击run,点击Edit Configurations

选中Main

然后在 VM opition中添加

-Djava.library.path=/home/chao/IdeaProjects/JniTest/src/com/zero_waring/jni_test

然后编译就OK了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值