什么是LD_LIBRARY_PATH以及如何使用它

What is LD_LIBRARY_PATH and how to use it?

本文关键字:何使用 PATH LD LIBRARY 什么      更新时间:2023-10-16

我参与开发一个Java项目,该项目使用了一些c++组件,因此我需要Jacob.dll。(在Windows 7上)

我一直得到java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path无论我把Jacob.dll放到哪里....

我寻找可能的决定和一个,我还没有尝试到目前为止是设置LD_LIBRARY_PATH变量,指向.dll文件。

我没有什么经验,我不熟悉这个变量的含义和用法,你能帮我吗?

LD_LIBRARY_PATH是Linux/Unix中预定义的环境变量,它设置链接器在链接动态库/共享库时应该查找的路径。

LD_LIBRARY_PATH包含一个冒号分隔的路径列表,链接器优先考虑这些路径,而不是标准库路径/lib/usr/lib。标准路径仍然会被搜索,但只有在LD_LIBRARY_PATH中的路径列表耗尽后才会被搜索。

使用LD_LIBRARY_PATH的最佳方法是在执行程序之前立即在命令行或脚本中设置它。这样新的LD_LIBRARY_PATH就与系统的其余部分隔离了。

示例用法:

$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program

由于您在windows系统上谈论.dll,并且.dll必须放置在链接器在链接时搜索的路径上,在windows中,该路径由环境变量PATH设置,因此将.dll添加到PATH中,它应该工作良好。

通常您必须在JVM的命令行上设置java.library.path:

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass

LD_LIBRARY_PATH是特定于Linux的环境变量,它指向动态加载器应该在其中查找共享库的目录。

尝试在PATH变量中添加.dll所在的目录。Windows将自动查找这个环境变量中列出的目录。LD_LIBRARY_PATH可能不会解决这个问题(除非JVM使用它——我不知道)。

LD_LIBRARY_PATH是默认的库路径,用于检查可用的动态库和共享库。它是特定于linux发行版的

与windows中的环境变量PATH类似,链接器在链接期间检查可能的实现。

我的错误也与没有找到服务所需的.so文件有关。我使用LD_LIBRARY_PATH变量来优先考虑链接器拾取的路径以搜索所需的库。

我将服务和.so文件复制到一个文件夹中,并将其输入LD_LIBRARY_PATH变量

LD_LIBRARY_PATH=. ./service

在同一个文件夹中,我给出了上面的命令,它工作了。

那么,错误消息告诉您该怎么做:将Jacob.dll所在的路径添加到java.library.path。您可以在命令行中这样做:

java -Djava.library.path="dlls" ...

(假设Jacob.dll在"dll "文件夹中)

另见java.lang.UnsatisfiedLinkError no *****.dll in java.library.path