gpt4 book ai didi

java - java.library.path 中没有 jaybird [dll]

转载 作者:行者123 更新时间:2023-11-30 09:34:06 27 4
gpt4 key购买 nike

当使用嵌入式 firebird 导出我的 java 项目时,我在控制台中收到以下消息: “在 java.library.path 中没有 jaybird[22[任何版本,我猜]]”。

但它实际上是在我的项目的库路径上 self 引用到我的工作区。我已经尝试了很多解决方法,比如

System.LoadFile("jaybird22.dll") //full uri, just the name of the dll, nada
System.Load("jaybird22.dll") //full uri, just the name of the dll, nada

或者在用户库中插入dll或者将 dll 作为引用库放在另一个文件夹中。

这真的让我很紧张。如何解决此错误? JNI?

最佳答案

解决方案

好的,这是解决这个问题的方法。问题是在 jar 中没有 dll,也没有任何包含文件的文件夹被打包到 jar 中。所以几乎每个 dll、带有图像的文件夹或任何必须在可运行 jar 所在文件夹旁边的文件夹中。唯一打包在 jar 中的是外部 jar 和用于运行软件的 .java 文件。

无论如何,对于 Firebird 嵌入式模式来说,这非常棘手。由于 jaybird(SOME_VERSION).dll 必须放在所有 .dll、.msg 文件旁边。但是 JVM 会要求 jaybird dll 在 java.library.path 中,当然它只是 system32 和一些与程序无关的 java 文件夹。

因此,为了让您的程序将可运行的 jar 文件夹检测为 java.library.path(实际上应该称为路径),其中 jaybird dll 文件和其他 firebird 文件和文件夹是您将这些 LOC 放在 main 方法中:

String decodedPath =URLDecoder.decode(ClassLoader.getSystemClassLoader().getResource(".").getPath(), "UTF-8");
decodedPath=decodedPath.substring(1, decodedPath.length()-1).replaceAll("/", "\\\\");
System.setProperty("java.library.path",decodedPath+";"+System.getProperty("java.library.path")));

我为库路径连接了以前的目录,因为我只是将它添加到列表中。

请注意,这些 LOC 必须在 ANY CODE 之前,这也包括调用构造函数。如果您使用的是全局静态模块或 JNI 调用,请当心。

我希望这可以节省一些人的时间,我已经浪费了 12 个小时的时间来试图正确地解决这个问题。

如果管理员不删除我的编辑或这个问题的 self 回答,我将不胜感激。

快乐编码=D

关于java - java.library.path 中没有 jaybird [dll],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com