前些天在配置通过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相关的说明,这里就暂不描述了(有时间可以再深入学习)。
![](http://dl.iteye.com/upload/picture/pic/28297/29349bd2-3cfd-3bc3-afb4-5afb2452524e.png)
分享到:
相关推荐
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH export LD_LIBRARY_PATH ``` 这将将当前目录添加到LD_LIBRARY_PATH环境变量中,从而使Java程序可以找到动态链接库。 五、java.library.path环境变量 java.library.path环境...
2. **设置环境变量**:在Linux环境中,需要将`libopencv_java454.so`所在的目录添加到`LD_LIBRARY_PATH`环境变量中,以便系统能找到这个库文件。 3. **构建项目**:在你的Java项目中,将`opencv-454.jar`加入到类...
- 示例命令:`LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH export LD_LIBRARY_PATH` - 注意这里的`.`表示当前目录,如果动态链接库位于其他目录,则需要替换为正确的绝对路径。 3. **确认Java查找路径**: - 需要检查`...
这通常涉及设置环境变量`LD_LIBRARY_PATH`或者在应用程序启动时指定库路径。在开发过程中,还需要确保Java编译器和JVM(Java虚拟机)都是兼容arm64架构的。 此外,对于Android开发者来说,这个版本的TensorFlow也...
临时修改可以在运行时通过环境变量实现,例如通过命令行设置 `export LD_LIBRARY_PATH=./`。 - 临时设置:`export LD_LIBRARY_PATH=./` - 永久设置:将所需库文件的路径添加到系统的环境变量中。 2. **使用 `-D...
2. **环境变量配置**:在Linux环境下,可能需要将库文件路径添加到`LD_LIBRARY_PATH`环境变量中,以便系统能找到并加载.so文件。 3. **版本兼容性**:确保使用的OpenCV Java库版本与项目的其他依赖库相兼容,避免...
最后,我们用`gcc`生成动态链接库文件`libtoUpper.so`,并将库路径添加到环境变量`LD_LIBRARY_PATH`,这样Java就可以找到并加载这个库。 总结一下,这个JNI示例涵盖了以下知识点: 1. JNI的基本概念和作用。 2. ...
ijkplayer 的动态库v7a 和v8a,支持海康摄像头RTSP h264协议,源码来自最新版本ijkplayer k0.8.0 使用原DEMO即可支持RTSP mp4文件等播放,首画面500ms显示. module-lite-rtsp.sh的内容如下: ...
- 设置 `LD_LIBRARY_PATH` 以包含 `libsapjco3.so`,如 `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/sapjco3`。 4. **测试连接**:编写一个简单的Java程序,使用SAP JCo API测试连接到SAP系统。这通常涉及创建...
- 如果遇到JNI函数找不到的问题,检查动态链接库的路径是否正确,是否已添加到LD_LIBRARY_PATH。 5. 报告部分: 报告可能涵盖了测试目的、测试步骤、遇到的问题、解决方案以及最终的测试结果。对于初学者来说,这...
System.loadLibrary("path-to-library-file"); } in some class. However, the application must also ensure that the library is not loaded more than once. If the above code were placed in a class inside...
1. **配置环境变量**:为了使Java程序能够找到动态链接库`libgoodluck.so`,需要设置环境变量`LD_LIBRARY_PATH`。 - 设置命令:`export LD_LIBRARY_PATH=/home/swan/lib` 2. **运行Java程序**:最后,运行Java...
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/tess4j_linux # 添加到环境变量 ``` 然后,在代码中初始化Tess4J,指定数据路径,这是Tesseract所需的语言数据文件存放的位置。通常,Tesseract在安装时会自动...
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ``` 同时,确保Java的类路径(CLASSPATH)包含了GDAL的Java库。例如: ```bash export CLASSPATH=/usr/local/share/gdal/Java/gdal.jar:/usr/local/share...
设置LD_LIBRARY_PATH环境变量,并运行Java程序。 ``` export LD_LIBRARY_PATH=. java HelloWorld ``` 执行结果将打印出“Hello world!”字符串。 本手册旨在帮助读者快速掌握JNative技术,通过实例讲解,让读者深入...
2. 如果不希望将库文件放在标准路径,可以通过设置环境变量`LD_LIBRARY_PATH`来指定库文件的搜索路径,例如:`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libsapjco3.so`。 3. 在Java代码中,确保正确加载了...
在Linux上,确保动态库的搜索路径正确,或者使用`LD_LIBRARY_PATH`环境变量来指定。 总结起来,这个示例提供了一个完整的JNI应用流程,从Java端的本地方法声明,到C端的实现,再到编译、链接生成库文件,最后在...
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/snappy/lib ``` 9. **验证安装**:通过运行测试程序检查Snappy是否正确安装: ``` make check ``` 完成上述步骤后,Snappy压缩库就在Linux服务器上成功...