如何使用JNI使用java程序运行c程序

时间:2015-03-17 14:01:58

标签: java c dll header java-native-interface

我浏览了整个互联网,现在我坚持生成共享库。 第一个Java文件:

import java.io.*;
public class JavaToC {

public native void helloC();

static {
    System.loadLibrary("HelloWorld");
}

public static void main(String[] args) {
    new JavaToC().helloC();
}}

编译完上面的java程序后,我还使用了

创建了头文件
javah JavaToC

现在我写了我的简单C程序:(HelloWorld.c)

#include <stdio.h>
#include <stdlib.h>
#include <JavaToC.h>
#include <jni.h>

JNIEXPORT void JNICALL Java_JavaToC_helloC(JNIEnv *env, jobject javaobj) 
{
printf("Hello World: From C");
return;
}

现在我想创建一个原生共享库,但在这里我卡住了,我用了

gcc HelloWorld.C -IC:\Program Files\Java\jdk1.7.0_21\include -IC:\Program Files\Java\jdk1.7.0_21\include\win3 -shared -o HelloWorld.dll

但是在Windows中输入这些命令之后,它会返回错误:

gcc: error: Files\Java\jdk1.7.0_21\include: No such file or directory
gcc: error: Files\Java\jdk1.7.0_21\include\win3: No such file or directory

我无法清除它! :((

2 个答案:

答案 0 :(得分:0)

您可以使用SWIG(请参阅http://www.swig.org/)在C代码之上生成Java API包装器。 您必须只编写swig接口文件,swig使用该文件为不同的类及其包含的方法生成适当的.java文件。

在您当前的方法中,您遇到的一个问题是因为您需要在程序文件周围加上引号以逃避该空间。

答案 1 :(得分:0)

gcc -c -I"/usr/lib/jvm/java-8-openjdk-amd64/include" -I"/usr/lib/jvm/java-8-openjdk-amd64/include/linux" HelloJNI.c

在Ubuntu中,文件名为HelloJNI.c 并且-I/usr/lib/jvm......是保存文件的路径。