java本地调用c++的动态库解决方法
java本地调用c++的动态库
大家好,我在做个java调c++的dll库的例子。只是简单的输出个hello world这样的。但是在将c++做成dll库的时候遇到了问题。
首先是java的调用类
HelloWorld.java
这是它的内容:
然后通过命令行
javac HelloWorld.java
javah HelloWorld
生成了
HelloWorld.class和HelloWorld.h
这是HelloWorld.h的自动生成的代码
两个文件
接着在同个目录下创建了
hello.c文件,内容如下
接着想将hello.c做成一个hello.dll库文件,在命令行:
cl -ID:\HelloWorld.h -IC:\java\include -IC:\java\include\win32 -LD D:\hello.c -Fehello.dll
可是却出现了一下错误:
D:hello.c(3):fatal error C1083:Cannot open include file:'HelloWorld.h':No such file or direcotry
说明:HelloWorld.java,HelloWorld.class,HelloWorld.h,hello.c他们都在D盘目录下。
因为自己不懂c++,所以搞不清这到底是什么问题。hello.c中include的HelloWorld.h明明是在同一个目录下,而且我在命令行里还用了“-ID:\HelloWorld.h”引入了这个资源。可是还是报找不到的错误。望各位大侠帮忙看看啊。不胜感激。。。。。。
------解决方案--------------------
-ID:\HelloWorld.h
你加这个是何意?
-I后面跟的是路径而不是文件
大家好,我在做个java调c++的dll库的例子。只是简单的输出个hello world这样的。但是在将c++做成dll库的时候遇到了问题。
首先是java的调用类
HelloWorld.java
这是它的内容:
- Java code
public class HelloWorld { public native void displayHelloWorld(); public native void displayMyName(); static { System.loadLibrary("hello"); } /** * @param args */ public static void main(String[] args) { new HelloWorld().displayHelloWorld(); new HelloWorld().displayMyName(); } }
然后通过命令行
javac HelloWorld.java
javah HelloWorld
生成了
HelloWorld.class和HelloWorld.h
这是HelloWorld.h的自动生成的代码
- C/C++ code
/* 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: displayHelloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject); /* * Class: HelloWorld * Method: displayMyName * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayMyName (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
两个文件
接着在同个目录下创建了
hello.c文件,内容如下
- C/C++ code
#include <stdio.h> #include <jni.h> #include <HelloWorld.h> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *env, jobject obj){ printf("Hello world!\n"); return; } JNIEXPORT void JNICALL Java_HelloWorld_displayMyName (JNIEnv *env, jobject obj){ printf("我叫XX\n"); return; }
接着想将hello.c做成一个hello.dll库文件,在命令行:
cl -ID:\HelloWorld.h -IC:\java\include -IC:\java\include\win32 -LD D:\hello.c -Fehello.dll
可是却出现了一下错误:
D:hello.c(3):fatal error C1083:Cannot open include file:'HelloWorld.h':No such file or direcotry
说明:HelloWorld.java,HelloWorld.class,HelloWorld.h,hello.c他们都在D盘目录下。
因为自己不懂c++,所以搞不清这到底是什么问题。hello.c中include的HelloWorld.h明明是在同一个目录下,而且我在命令行里还用了“-ID:\HelloWorld.h”引入了这个资源。可是还是报找不到的错误。望各位大侠帮忙看看啊。不胜感激。。。。。。
------解决方案--------------------
-ID:\HelloWorld.h
你加这个是何意?
-I后面跟的是路径而不是文件