最近学习java,想利用JNI调用一个*.so文件.在网上找了不少例子,现在我会生成*.h和*.so文件,只是调用时java.lang说找不到*.so,我想是classpath的问题,哪位大虾赐教,谢

解决方案 »

  1.   

    是在linux下吗?
    如果.so生成了,只要设定LD_LIBRARY_PATH就可以了,最简方法执行以下命令:
    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
    然后用java调你的类就可以了
      

  2.   

    我还是不太懂,索性把不懂的全问了吧:
        1)在LINUX下装JAVA时,设置CLASSPATH到底有什么用,java/j2sdk1.4.2_07/lib/dt.jar和java/j2sdk1.4.2_07/lib/tools.jar有什么用
        2)我的工作区应该放在什么地方,Exception in thread "main" java.lang.NoClassDefFoundError: testso是什么错误
        3)能具体解释一下LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH吗,我编的*.so文件放在什么地方都行么?
        不胜感谢!万分感谢!感谢感谢再感谢!
      

  3.   

    1)在LINUX下装JAVA时,设置CLASSPATH与windwos下的CLASSPATH的功能相同,它包含JVM的搜索路径
      dt.jar和tools.jar都是sun java 自带的包,含有com.sun.*,java.swing.*,javax.swing.*等,你在windows下用winzip可以打开看它所含的类
    2).你的工作区可放在任意位置,不过最好在CLASSPATH中含当前路径
     linux下 CLASSPATH=.:$CLASSPATH windwos下set  CLASSPATH=.;%CLASSPATH%
     Exception in thread "main" java.lang.NoClassDefFoundError: testso是在你的JAVA程序中,没有找到类(也应与CLASSPATH有关)
    3).LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
      表示把pwd的执行结果返回给LD_LIBRARY_PATH,并加在原LD_LIBRARY_PATH前面
      pwd 是linux得到当前路径的命令(相当于dos下的cd)
     a.JAVA JNI在linux下运行时会在LD_LIBRARY_PATH中搜索.so文件
     b.如果你只要在当前目录下执行,只要简单地:LD_LIBRARY_PATH:=.
     c.别忘了前面的export,因为linux的环境变量只对当前进程有效
     d.我编的*.so文件放在什么地方都行,只要在LD_LIBRARY_PATH中加入.so的目录