谁能给我写一个linux下的java调用C代码的例子?我执行老是出问题

 我来答
飞广在天
2017-10-16 · TA获得超过131个赞
知道小有建树答主
回答量:169
采纳率:100%
帮助的人:57.8万
展开全部

java

public class HelloWorld
{
 static 
 {
  System.loadLibrary("native");
  //对应C语言 动态库的名字
 }
 private native int hello(int[]arr,int num);
 public static void main (String [] args)
 {
   int[]arr = {1,2,3,4};
  HelloWorld n = new HelloWorld();
  System.out.println(n.hello(arr,arr.length));
 }
}

头文件

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    hello
 * Signature: ([I)I
 */
JNIEXPORT jint JNICALL Java_HelloWorld_hello
  (JNIEnv *, jobject, jintArray);
#ifdef __cplusplus
}
#endif
#endif

c

#include <jni.h>

jint  jhello(JNIEnv *env,jobject obj,jintArray arr,jint num)
{
 jint *carr;
 jint i, sum = 0;
 carr = (*env)->GetIntArrayElements(env, arr, NULL);
 if (carr == NULL) {
  return 0; /* exception occurred */
 }
 for (i=0; i<num; i++) {
  sum += carr[i];
 }
 (*env)->ReleaseIntArrayElements(env, arr, carr, 0);
 return sum;
}

 
JNINativeMethod method[] = 
{
 "hello","([II)I",(void *)jhello,
};
jint JNI_OnLoad(JavaVM *jvm,void *reserved) 
{
 printf("jnionload \n");
 JNIEnv *env;
 jclass jcls;
 if((*jvm) ->GetEnv(jvm,(void **)&env,JNI_VERSION_1_2))
 {
  return JNI_ERR;
 }
 jcls = (*env) -> FindClass(env,"HelloWorld");
 if(jcls == NULL)
 {
  return JNI_ERR;
 }
 (*env) -> RegisterNatives(env,jcls,method,sizeof(method)/sizeof(JNINativeMethod));
 return JNI_VERSION_1_2;
}

主要是用jni.

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式