什么是LD_LIBRARY_PATH以及如何使用它?

时间:2011-08-22 13:15:25

标签: java c++ environment-variables jacob

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

无论我把Jacob.dll放在哪里,我都会得到java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path ....

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

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

6 个答案:

答案 0 :(得分:49)

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

由于你谈到.dll你在Windows系统上,.dll必须放在链接器链接器搜索的路径上,在windows中这个路径是由环境变量设置的{ {1}},请将PATH添加到.dll,它应该可以正常工作。

答案 1 :(得分:24)

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

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

答案 2 :(得分:8)

LD_LIBRARY_PATH是特定于Linux的,是一个环境变量,指向动态加载程序应查找共享库的目录。

尝试添加.dll在PATH变量中的目录。 Windows将自动查看此环境变量中的目录listet。 LD_LIBRARY_PATH可能无法解决问题(除非JVM使用它 - 我不知道)。

答案 3 :(得分:1)

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

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

(假设Jacob.dll位于“dlls”文件夹中)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

我的错误还与服务找不到所需的.so文件有关。 我使用了LD_LIBRARY_PATH变量来优先考虑链接程序选择的路径以搜索所需的lib。

我将服务和.so文件都复制到一个文件夹中,并将其作为{p>

LD_LIBRARY_PATH

我位于上面给出的命令所在的文件夹中,并且可以正常工作。