前些天在配置通过OCI的方式连接Oracle中曾进碰到一个关于“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”这么一个问题,这个问题纠结了许久才解决,解决方式参考前面的文章。
趁双休日好好的理解一下产生这个问题的来龙去脉。
先看一段话先:
PATH is the environment variable.
java.library.path is the system properties.
When the java application started, JVM will set java.library.path’s value using PATH’s value.
In
java program, it's very difficult to get the value of environment
variables, but it's very easy to get/set system properties. Use
System.getProperty("project_root", "..");
System.setProperty("project_root", "..");
java.libaray.path 是system properties,在windows系统通常是使用PATH的值,而在Linux上是用LD_LIBRARY_PATH的值。
随便也说一下java.class.path,他是对应于CLASSPATH中的值。
那LD_LIBRARY_PATH的值主要是干什么呢?他是来处理非标准路径下的”共享库“的,可以理解成windows 的dll,但在linux下是*.so的文件。
说完了基本的概念,再来看看OCI是怎么连接Oracle的,其实OCI是通过JNI(java native interface)的方式来访问Oracle的,请看下图
1)我们知道Oracle的驱动是classes12.jar(ojdbc14.jar),这里应该对应着java-class;
2)同样我们在JBOSS启动脚本中设置 JBOSS_NATIVE_DIR="/opt/instantclient_10_2",其实就是将LD_LIBRARY_PATH="/opt/instantclient_10_2",而在这个目录下有大量的*.so文件,这些应该对应native;
3)至于jni-stub是一些存根文件,可以参考一下JNI相关的说明,这里就暂不描述了(有时间可以再深入学习)。
分享到:
相关推荐
libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-...
JNI数组参数传递,在使用JNI编程时注意转换参数,尤其是数组的出入与传出。
08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存...
08_10_C_06_预编译&jni开发流程08_10_C_06_预编译&jni开发流程08_10_C_06_预编译&jni开发流程08_10_C_06_预编译&jni开发流程08_10_C_06_预编译&jni开发流程08_10_C_06_预编译&jni开发流程08_10_C_06_预编译&jni开发...
08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08...
marsboard-a20-android-4.2.2-sdk-v2.0_csi01_2ov7670_rtl8188eus 20150922 1824 JNI.7z marsboard的系统 TV-BOX marsboard的板子 7寸LCD,RGB显示 rtl8188eus 摄像头 双 ov7670 正常! 外加 JNI调用!
android JNI,适合android开发人员,特别是驱动级别的开发人员
Android--开发--_jni操作指南
Android 通过JNI调用驱动代码实例
android 环境下利用ndk开发应用程序的例子,就可以在java下用c的库
Java的JNI相关方面的书籍,很好,推荐下载
android hello-jniCallback sample
08_15_JNI_03_方法访问_数组处理&jni引用08_15_JNI_03_方法访问_数组处理&jni引用08_15_JNI_03_方法访问_数组处理&jni引用08_15_JNI_03_方法访问_数组处理&jni引用08_15_JNI_03_方法访问_数组处理&jni引用08_15_JNI_...
android jni资料分享,初学者学习之
本例子用java实现调用动态库的例子,JNI调用。
Opendds编译的必要工具
JNI开发中使用的API文档,此文档为CHM格式,非PDF格式
实现了android 应用层和通过JNI层回调函数完成应用与native 本地代码之间的相互访问,对于了解JNI回调函数的用法有帮助
JDK 本身定义了目标明确并功能完善的JNI( Java Native Interface ) 与虚拟机直接进行交互,这些 API 能很方便的进行扩展,从而满足开发者各式的需求. JVMTI( JVM Tool Interface) ,是JAVA虚拟机提供的本地接口,它是...
用JAVA 的JNI调用本地c/C++的函数模块,以库函数的形式提供给Java 程序使用