我正在为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;
}
答案 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 ++编写的代码