java - 创建 Java native 接口(interface)的问题

标签 java c++ visual-studio-2008 java-native-interface msvcr90.dll

我试图实现 JNI。

首先我创建包含一个本地方法的 Java 类,并使用“javac HelloWorld.java”编译它,然后使用“javah HelloWorld”创建头文件...这是代码

class HelloWorld {
     private native void print();
     public static void main(String[] args) {
         new HelloWorld().print();
     }
     static {
         System.loadLibrary("HelloWorld");
     }
 }

HelloWorld.h文件如下图......

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* 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

在此之后我创建了 HelloWorld.c 文件...这是代码

 #include 
 #include 
 #include "HelloWorld.h"

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

然后在 Visual Studio 2008 中使用下面提到的命令编译我的 HelloWorld.c 文件

cl -Ic:\java\jdk\include -Ic:\java\jdk\include\win32 -MD -LD HelloWorld.c -FeHelloWorld.dll

它编译得很好,dll 和其他文件在“HelloWorld.class”文件所在的同一个 bin 文件夹中创建。 但是在使用“java HelloWorld”命令运行 java 文件时出现 msvcr90.dll 文件丢失错误.... 我试图重新安装我的 JDK 但仍然是同样的问题

我该怎么办...

最佳答案

此错误与 Visual Studio 中的build设置有关。您可以选择 CRT 库的静态链接(使用/MT 选项代替/MD)或将 msvcr90.dll 复制到包含您的 HelloWorld.dll 的目录或 %PATH% 中的其他目录。

关于java - 创建 Java native 接口(interface)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168350/

相关文章:

JavaFX 标签不更新

c++ - Mex 文件执行时出错,Matlab 窗口

asp.net - 有没有办法阻止为所有项目创建 ASP.NET 开发服务器?

c# - 如何更快地在 Visual Studio 中编写代码?

java - Spring Boot Jersey 静态内容,资源位于 "/"

java - 如何设置 MessageDigest 种子?

java - 用于Rich Client Java(Swing)应用程序的持久性Web服务

c++ - C++中的模板工厂模式

java - 具有类 Java API 的 C++ 库

visual-studio - Visual Studio SUO 文件的文件格式或解析指南。