C语言项目中怎么调用java类
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,C语言项目中怎么调用java类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先需要编写java类public class Sample
千家信息网最后更新 2025年01月31日C语言项目中怎么调用java类
C语言项目中怎么调用java类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
首先需要编写java类
public class Sample { public static void test2() { System.out.println("java打印的helloword"); }}
这是非常简单的一个java类,里面就只有一个java方法。等下我们就要通过C来调用这个方法。jvm只认识class,首先得编译它,java Sample.java。在当前目录得到一个Sample.class的文件。这个文件等下会被我们的C程序加载。
然后编写C代码。
#include//引入jni的头文件,下面加载类和调用类的方法都是通过jni里面的函数实现的#include int main() { JavaVMOption options[1]; JNIEnv *env; JavaVM *jvm; JavaVMInitArgs vm_args; long status; jclass cls; jmethodID mid; jint square; jboolean not; options[0].optionString = "-Djava.class.path=."; //设置classpath memset(&vm_args, 0, sizeof(vm_args)); vm_args.version = JNI_VERSION_1_2; vm_args.nOptions = 1; vm_args.options = options; status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); if (status != JNI_ERR) { //cls = (*env)->FindClass(env, "java/lang/Object"); cls=(*env)->FindClass(env,"Sample");//通过FindClass函数找到这个类,这里需要添加类的描述符合,如果是Object就应该是java/lang/Object printf("find the class\n"); if(cls !=0) { //mid = (*env)->GetStaticMethodID(env, cls, "main", "(I)I"); mid=(*env)->GetStaticMethodID(env,cls,"main","([Ljava/lang/String;)V");//通过函数找到方法,这里面应该是方法的描述符。 printf("find the method\n"); if(mid !=0) { printf("exec method\n"); square = (*env)->CallStaticIntMethod(env, cls, mid, NULL); //执行方法 printf("Result of intMethod: %d\n", square); } mid = (*env)->GetStaticMethodID(env, cls, "booleanMethod", "(Z)Z"); if(mid !=0) { not = (*env)->CallStaticBooleanMethod(env, cls, mid, 1); printf("Result of booleanMethod: %d\n", not); } } else{ printf("not found\n"); } (*jvm)->DestroyJavaVM(jvm); return 0; } else return -1; }
,如果直接gcc 是会报错的,因为jni头文件不在系统的头文件里面。而且动态链接库也不在系统默认的库里面。所以编写一个Makefile:
compile: gcc calljvm.c -I $JAVA_HOME/include/ -I $JAVA_HOME/include/linux/ -L$JAVA_HOME/jre/lib/amd64/server/ -ljvm -o calljvm
执行make,顺利应该编译通过,但是执行是会报错的。因为libjvm.so不在/usr/lib 里面。所以得把jvm的库加到系统库路径里面
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:$JAVA_HOME/jre/lib/amd64/servr
系统默认会在/usr/lib里面寻找动态链接库,如果有LD_LIBRARY_PATH之后会优先在LD_LIBRARY_PATH指定路径找,如果找不到再去/usr/lib。
看完上述内容,你们掌握C语言项目中怎么调用java类的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
方法
文件
系统
函数
语言
项目
内容
动态
更多
路径
链接
问题
会报
编译
束手无策
为此
代码
原因
只有
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中央调研网络安全基地
数据库服务器怎么调用
网络安全攻守方
服务器安全盾
易软物业收费系统服务器地址
网络安全宣传承诺
杭州博界网络技术
服务器导轨出售
csfdb数据库
关于服务器raid的题目
黔江区一站式网络技术供应商家
数据库软考中级内容
有效前沿 建模 数据库
服务器安全设置 一
网络安全无小事作文
方舟服务器加载特别慢
廊坊市纵横网络技术有限公
仿真软件开发用什么好
梦想城镇服务器怎么样
互联网科技公司怎么找项目
十一网络安全值守通知
西安环达通网络技术有限公司
笑话视频软件开发
联通杯网络安全知识竞赛题库
一些临时服务器问题是什么情况
nas服务器能用几个硬盘
成绩按照升序降序 数据库
达内的计算机网络技术怎么样
mysql数据库死锁
神通数据库怎么看是否授权