首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

java本地调用c++的动态库解决方法

2012-04-22 
java本地调用c++的动态库大家好,我在做个java调c++的dll库的例子。只是简单的输出个hello world这样的。但是

java本地调用c++的动态库
大家好,我在做个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 __cplusplusextern "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后面跟的是路径而不是文件

热点排行