先写了一个java文件(HelloJNI.java):
package test;public class HelloJNI { private native String hello_jni();
public static void main(String[] args){
new HelloJNI().hello_jni();
}

}之后javac HelloJNI.java 在同级目录下得到HelloJNI.class
之后javah -jni HelloJNI 报错:error: cannot access HelloJNI
bad class file: ./HelloJNI.class
class file contains wrong class: test.HelloJNI
Please remove or make sure it appears in the correct subdirectory of the classpath.
com.sun.tools.javac.util.Abort
at com.sun.tools.javac.comp.Check.completionError(Check.java:180)
at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:167)
at com.sun.tools.javadoc.RootDocImpl.<init>(RootDocImpl.java:95)
at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:178)
at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:364)
at com.sun.tools.javadoc.Start.begin(Start.java:162)
at com.sun.tools.javadoc.Main.execute(Main.java:113)
at com.sun.tools.javah.Main.main(Main.java:153)
javadoc: error - fatal error请问怎样解决呢?

解决方案 »

  1.   

    你应该在最开始的目录中运行javah
      

  2.   

    编译头文件完成了但是遇到新的问题:
    在src目录下执行g++ -shared -l /usr/lib/jvm/java-6-openjdk/include test_HelloJNI.cpp -o lib_hello_jni.so
    报错:
    test_HelloJNI.cpp:2:17: error: jni.h: No such file or directory
    In file included from test_HelloJNI.cpp:3:
    test_HelloJNI.h:15: error: ‘JNIEXPORT’ does not name a type
    test_HelloJNI.cpp:5: error: ‘JNIEXPORT’ does not name a type
      

  3.   

    现在执行:
    g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so
    报错:
    /usr/bin/ld: /tmp/ccfWtZxN.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
    /tmp/ccfWtZxN.o: could not read symbols: Bad value
    collect2: ld returned 1 exit status
      

  4.   

    应该是指定的路径不正确造成的,希望这篇博文对你有帮助:
    http://blog.csdn.net/whitetao/article/details/6983543