Linux下JNI调用so文件,出现这样的错误,折腾半天,整理一下:
-------------办法1:---------------------
1、 在System.loadLibrary之前,写一行 System.out.println( System.getProperty("java.library.path"));
2、运行你的程序你将获得java.library.path指向的目录
3、拷贝你的libxxx.so到java.library.path指向的某个目录下面。
-------------办法2:--------------------- 也可以通过设置LINUX下的系统变量LD_LIBRARY_PATH来添加java.library.path, 只要在启动~/.bashrc中添加如下代码然后重新登录shell,就可以将动态库放在当前目录下运行你的jni程序了。 export LD_LIBRARY_PATH=.:..:$LD_LIBRARY_PATH
这段,没看懂,也没试~~
-------------办法3:--------------------- 在java命令后通过-D指定变量,如 java -Djava.library.path=./lib
嗯,最后我是这么搞定的,简单~~
-------------办法4:--------------------- Eclipse工程里,可以在Build Path的libraries里, 展开JRE System Library 修改Native Library location,指定目录就行, 那么这个工程就可以直接执行了~~
--------------------------------------------------- 严重注意:
Linux下的.so文件类似于windows下的DLL文件, 但是,Linux下规定一定要以“lib”开头,如libxxx.so的形式, "xxx"是你在System.loadLibrary("xxx")中用到的加载库名称,不要写成 System.loadLibrary("libxxx")!!!!!
windows下的dll文件,是要写全名的,如libxxx.dll,代码里要写 System.loadLibrary("libxxx")
这就是差别。
|