【jni】linux 下生成 jni 并进行测试

文件目录

创建好目录  c-complete, com/junxingpack/test 目录

第一步, 通过 JNIDemo.java 文件生成接口函数 , .h 文件

JNIDemo.java 文件如下

package com.junxingpack.test;

public class JNIDemo {

    //定义一个方法,该方法在C中实现

    public native void testHello();

    public static void main(String[] args){

        //加载C文件

        System.loadLibrary("TestJNI");

        JNIDemo jniDemo = new JNIDemo();

        jniDemo.testHello();

    }

}

 

JNIDemo.java 文件在 com/junxingpack/test 目录下, 在 mytest-java 目录下执行下面命令

javah -classpath . -jni com.junxingpack.test.JNIDemo

将生成 com_junxingpack_test_JNIDemo.h 文件

 

第二步, 将 jdk 安装目录下的 jni_md.h jni.h 拷贝到c-complete目录下,为生成 *.so 做准备。

以及 前面生成的 com_junxingpack_test_JNIDemo.h 文件

com_junxingpack_test_JNIDemo.h jni.h jni_md.h testjni.cpp

 

第三步: 在 c-complete 目录下,创建 tsetjni.cpp 文件,并实现方法。

#include "com_junxingpack_test_JNIDemo.h"
#include <iostream>
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_junxingpack_test_JNIDemo_testHello
(JNIEnv *, jobject) {

    printf("this is C++ print");

}

 

第四步:编写 makefile 文件, 生成 .so 。

这里有个目录,如果你的代码目录变了, 改下对应的源文件路径即可。

CC = g++
MAIN_PATH=./..
SRC_PATH=$(MAIN_PATH)/
VPATH =$(SRC_PATH)
SOURCE=$(wildcard $(SRC_PATH)/*.cpp)
SNOTDIR=$(notdir $(SOURCE))
OBJS=$(patsubst %.cpp, %.o, $(SNOTDIR) )

SNOTDIR_C=$(notdir $(SOURCE_C))
OBJS_C= $(patsubst %.c,%.o,$(SNOTDIR_C))

########################################
SYSLIB= -lpthread -lrt
CFLAGS= -O2 -c -fPIC -D_GNU_SOURCE -I/usr/local/include -I$(SRC_PATH) -I$(MAIN_PATH)
LDFLAGS=
#### java
TARGET=../bin/libTestHello.so
all: ${TARGET}
${TARGET}:${OBJS} $(OBJS_C)
	${CC}  -shared -ftemplate-depth-128 -fPIC ${SYSLIB} ${OBJS} ${OBJS_C} -o ${TARGET} 

.cpp.o:
	${CC} ${CFLAGS} $<

.c.o:
	gcc ${CFLAGS} $<

clean:
	rm -f ${TARGET}
	rm -f *.o

 

第五步:编译 *.java 文件,并运行,查看结果

最外层 makefile 文件内容如下,方便运行测试。


.PHONY:compile run clean

compile:
	javac com/junxingpack/test/JNIDemo.java
run:
	java com.junxingpack.test.JNIDemo

clean:
	@echo "start clean"

打印了 this is C++ print

Success!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值