jni有谁照着jdk tutorial里的那个例子做过,成功了没?我完全照着做的,结果在生成dll时出错, fatal error C1083: Cannot open include file: 'jni.h': No such file or directory不知怎么回事用cl生成dll:
cl -IC:\Program Files\Java\jdk1.6.0_02\include -IC:\Program Files\Java\jdk1.6.0_02\include\win32 -LD HelloWorldImp.c -Fehello.dll我确定jni.h这个头文件是有的,在C:\Program Files\Java\jdk1.6.0_02\include里面,上面这个句子也没错啊,到底是哪里出错了?

解决方案 »

  1.   

    嗯?你确定是在:
    C:\Program Files\Java\jdk1.6.0_02\include里面,编译的时候却写:
    C:\Program Files\Java\jdk1.6.0_02\include\win32
      

  2.   

    -IC:\Program Files\Java\jdk1.6.0_02\include
     -IC:\Program Files\Java\jdk1.6.0_02\include\win32
    这两个目录都要写的
      

  3.   

    哦,不对,没看仔细,sorry,你把-I后面的路径参数加个扩号试试:
    cl -I"C:\Program Files\Java\jdk1.6.0_02\include" -I"C:\Program Files\Java\jdk1.6.0_02\include\win32" -LD HelloWorldImp.c -Fehello.dll
      

  4.   

    试了,结果错误变成:
    fatal error C1083: Cannot open include file: 'jni.h': Invalid argument
      

  5.   

    这会出现的错误是:
    C:\Program Files\Java\jdk1.6.0_02\include\jni.h(21) : fatal error C1083: Cannot
    open include file: 'stdio.h': No such file or directory晕,怎么变成了stdio.h
      

  6.   

    那应该是jni.h间接包含了stdio.h。
      

  7.   

    我看了下,jni.h里是包含了stdio.h,但是教程里没做特殊处理啊。
    如果需要的话,该怎么做呢?
      

  8.   

    你先在命令行窗口中执行一下vcvarsall.bat,然后再执行你的命令试试看。
    比如,在我的机器上是:
    "C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
      

  9.   

    如查还是不行,干粹把VC的include路径也用-I参数加上,比如:
    -I"C:\Program Files\Microsoft Visual Studio 8\VC\include"
    只是这样一来,VC的lib路径也要使用/LIBPATH选项手工加了。
      

  10.   

    试了,还是一样的结果vcvarsall.bat必须在命令窗口下执行吗?我是到目录下双击执行的,在命令行下怎么执行我不会..
    这样会有影响吗?
      

  11.   

    当然有影响,环境变量的设置只对当前命令行窗口有效。
    就像我上面那样,写个完整的绝对路径(如果中间有空格就用引号扩起来),然后敲回车就OK了。"C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
    回车。呵呵。
      

  12.   

    如果你不在VC IDE下面编程,那么一些重要的环境配置(比如标准头文件的搜索路径,标准库文件的搜索路径)就只能通过这个批处理文件来手工设置。