本文旨在通过JNI技术,实现Java程序快速调用C/C++库函数的功能。
1、 确保Linux系统已配置C/C++和Java开发环境,随后编写并运行Java程序。
2、 返回包的根目录,编译Java源代码。
3、 编译源文件:javac net/zhangkun/HelloWorld.java,执行后将生成对应的字节码文件HelloWorld.class。
4、 接着编译生成供C/C++程序使用的头文件。
5、 生成了net_zhangkun_HelloWorld.h 文件,请勿修改该文件内容,仅可添加头文件,其余部分保持不变。
6、 把net_zhangkun_HelloWorld.h文件复制到目标位置
7、 在 /opt/adminwebapps/k.zhnag/javatest/net/zhangkun/ 目录下进行操作(该路径可根据实际需要自行调整,仅作示例使用),确保所设路径与Java程序中加载库文件的路径保持完全一致,以避免出现资源无法加载的问题。
8、 创建一个名为a.cpp的文件,编写C++代码,将net_zhangkun_HelloWorld.h中的函数声明复制到该文件中,保持函数名不变,并在函数体内添加具体实现内容。
9、 编译自定义so库时需包含jni.h头文件
10、 使用g++编译器将a.cpp文件编译为动态库libgf.so,启用-fpic选项以生成位置无关代码,并通过-shared参数创建共享库。同时指定头文件搜索路径,包括当前目录及JDK安装路径下的include和include/linux目录,以便正确引用JNI相关头文件。
11、 生成库后执行ldd libgf.so,检查是否关联其他库,若有依赖则表明库生成正常。
12、 运行Java程序,测试能否调用so库中的函数。
评论
更多评论