C语言项目中怎么调用java类
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,C语言项目中怎么调用java类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先需要编写java类public class Sample
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
asp源码 数据库
网络安全宣传周工会
中非论坛 网络安全
海南ntp服务器云主机
国家网络安全审查办公室
关系数据库讲解视频
网络技术怎么从路由器截取资料
ibm服务器操作系统安装图解
web服务器双机热备
泰州工业网络技术价目表
pg格式文件 数据库
软件服务器系统升级手机无法登录
云端服务器下载安装
盐城企业软件开发优势
mysql数据库文件 迁移
用别人搭建的网络安全吗
网络安全教育培训心得小学生
汉口串口服务器价格
网络安全跟物理相关性高吗
以下是将pig数据库
西安国家网络安全直播
锐捷服务器商丘安装公司
回收服务器里的处理器
数据库无法展开数据库列表
道客服务器
《网络安全法教程》
R语言states数据库
霍尼韦尔DNS服务器地址
pi币40台服务器
365抽奖软件开发