由于.dll(JNI)无法启动程序

时间:2015-03-19 04:46:17

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

我正在为C ++做JNI教程,并且能够成功构建。但是,当我尝试运行时,会出现此错误弹出“无法启动程序'C:... \ CLIBHelloWorld.dll”。 我遵循的资源教程是: http://electrofriends.com/articles/jni/jni-part1-java-native-interface/ http://electrofriends.com/articles/jni/part-2-jni-visual-studio-setup-dll-project/

我的.dll配置在这里做错了吗?我确实改变了我的“附加包含目录”,我的Java正在工作,因为我能够将java.class文件编译成.header文件。

我编译的ClibHelloWorld.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

我的ClibHelloWorld.cpp是:

#include "HelloWorld.h"
#include "jni.h"
#include  "stdio.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
    printf("Hello world\n");
    return;
}

2 个答案:

答案 0 :(得分:0)

您无法运行DLL。到&#34;跑&#34;一个JNI DLL你还需要一个使用该DLL的Java程序。在你的情况下可能像

public static void main(String argv[]) {
    new HelloWorld().print();
}

Java运行时将检测到&#34; print&#34;是一个本机方法,将加载DLL并在那里调用该函数。为了能够从Visual Studio调试DLL,您最好的选择是输入&#34; java&#34;呼叫&#34;调试&#34; VS项目属性的一部分。 (它也可以将VS调试器附加到正在运行的Java进程,但是短程序通常在你有机会附加之前完成)

JNI是一种可以在Java和本机平台代码之间建立连接的技术。一种用法是从Java调用(通常)C代码。这就是你的教程正在做的事情。另一个用途是从C调用Java代码。这有点复杂,还有其他教程如何做到这一点,但只有在这种情况下才能构建一个EXE,Visual Studio可以&#34;刚开始&#34;。

答案 1 :(得分:0)

我认为这段代码只是.dll,它会在父Debug文件夹中生成一个.dll文件。

创建了一个HelloWorld.java并使用javac将其编译为.class文件 然后使用javah创建头文件。 然后在命令提示符下运行&#34; java HelloWorld&#34;运行程序并在Java程序中加载用C ++编写的代码