проблема создания Java-интерфейса - PullRequest
1 голос
/ 02 марта 2011

Я пытался реализовать 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;
 }

и затем скомпилируйте мой файл HelloWorld.c, используя нижеприведенную команду в Visual studio 2008

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

он компилируется довольно хорошо, и DLL и другие файлы создаются в той же папке bin, где находится файл "HelloWorld.class". но при запуске файла Java с помощью команды "java HelloWorld" ошибка msvcr90.dll в файле отсутствует ошибка .... Я попытался переустановить свой JDK, но все еще проблема

что мне делать ...

1 Ответ

0 голосов
/ 02 марта 2011

Эта ошибка связана с настройками сборки в Visual Studio. Вы можете выбрать статическую ссылку библиотеки CRT (используйте параметр / MT вместо / MD) или скопируйте msvcr90.dll в каталог с вашим HelloWorld.dll или другой каталог в% PATH%.

...