栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【CPP/JAVA】关于C/C++调用java的JNI的方法以及库路径问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【CPP/JAVA】关于C/C++调用java的JNI的方法以及库路径问题

废话前言:

关于C/C++调用java的JNI的方法,大体有两种办法一是采取LOADLIBRARY函数,动态加载jvm.dll的方式,这一点资料很多这里不再详叙,另外一种是引入头文件及jvm.dll的方式,这个网上提到的很少。

针对引入jvm.dll的方式,以WINDOWS为例,主要有以下坑点需要避开

1.jvm.dll所依赖的./bin/client/ 和./lib两个路径需要加入PATH变量,否则会提示

Error occurred during initialization of VM

Unable to load native library: Can't find dependent libraries

2.调用java的路径问题

需要在jvm的启动参数中加入下述内容,点号为当前主程序目录,需要修改对应的位置否则会出现错误

"-Djava.class.path=.;./****"

3.jvm.dll的问题,需要选择对应编译版本

这一点容易忽视,如mingw,vs 不同编译器要采用不同的版本,如果调用错误,一般在编译环节就会提示找不到链接符号的错误

4.线程绑定以及安全销毁jvm

同一进程(线程)只能对jvm实例化一次,因此二次实例化的时候会出现错误,在实例化之前可先取回jvm的实例,下面以C++操作为例

//取回线程中的jvm实例
JNI_GetCreatedJavaVMs(&mJvm,10,NULL);

//实例为空则创建实例
if(mJvm==NULL)
   JNI_CreateJavaVM(&mJvm, (void**)&mJvmEnv, &vmInitArgs);

//销毁实例
mJvm->DestroyJavaVM()

5.首次创建实例出现segment fault的问题

创建jvm实例的时候会出现内存段错误的问题,这个错误可能是调用jvm初始化参数不当造成的。

debug的时候会提示下述错误,因为没办法debug暂且无法跟踪错误定位。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号