54

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

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

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

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

4

6 回答 6

100

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必须将 a 放置在链接器在链接时搜索的路径中,因此在 Windows 中,此路径由环境变量设置PATH,因此将其添加.dllPATH它应该可以正常工作。

于 2011-08-22T13:19:04.400 回答
19

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

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass
于 2011-08-22T13:24:24.617 回答
14

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

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

于 2011-08-22T13:22:11.103 回答
4

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

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

于 2018-07-04T07:29:26.677 回答
2

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

我将服务和.so文件都复制到一个文件夹中,并将其提供给LD_LIBRARY_PATH变量

LD_LIBRARY_PATH=. ./service

在同一个文件夹中,我已经给出了上述命令并且它有效。

于 2018-07-04T05:59:48.530 回答
1

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

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

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

另请参见java.library.path 中的 java.lang.UnsatisfiedLinkError no *****.dll

于 2011-08-22T13:25:56.880 回答