C语言项目中怎么调用java类
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,C语言项目中怎么调用java类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先需要编写java类public class Sample
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
亿人帮互联网科技有限公司
新华互联网科技
广州万易互联网科技有限公司
科技互联网龙头
互联网科技保险
盈实互联网科技
远拓互联网科技
未来的互联网科技
互联网 新科技
上海电发互联网科技有限公司
互联网校园科技培训
畅思互联网科技
互联网科技圈年度人物
深圳无忧互联网科技
风投北京互联网科技
2021世界互联网领先科技成果发布
山东大美朱楼互联网科技有限公司
容联科技互联网电商
米泉互联网科技专业怎么样
华人运通互联网科技公司
互联网科技未来
科技类的互联网平台
互联网科技类展会
现代科技和互联网有关系吗
中国的互联网科技企业的崛起
杭州壁岐互联网科技有限公司
本届互联网博览会上的黑科技
合肥互联网科技公司公章图片
每天都有哪些好的互联网科技
互联网公司高科技产品