当前位置: 首页 > 知识库问答 >
问题:

可以修改windows上load库()的java进程中的“路径”吗?

岳良策
2023-03-14

也许还有一个“做不到”的问题:)

我有一个32位或64位的Java应用程序。我想在同一台机器上构建和测试这两个版本。

我有一个需要加载的本机库(实际上是一组DLL),它们在两个目录中构建和输出。

…/x64/. dll…/x32/. dll

“...”部分设置在Java“java.library.path”中

在应用程序启动中,代码执行以下操作:

    try {
        System.loadLibrary("x32/native-library");
        libraryLoaded_ = true;
    } catch(Throwable e) {
        try {
            System.loadLibrary("x64/native-library");
            libraryLoaded_ = true;
        } catch(Throwable t) {
            log.debug("failed to load module " + e); // : \"" + path + "\".",e);
            log.debug("    or win8 module " + t); // : \"" + path + "\".",e);
        }
    }

这是有效的(部分),因为加载32位库将在程序编译为java 64位时失败,然后它将尝试64位版本。

然而,native-library.dll依赖于与自己在同一文件夹中的其他DLLS,但是它们不会解析,除非该目录在java进程的系统路径环境变量中。

但是,如果x32和x64目录都在系统路径中,并且这两个目录中的dll具有相同的名称,那么将加载哪个依赖dll就不明确了。

我想拥有本地库。dll,首先从其所在的文件夹加载其依赖项。

我该如何做到这一点?java.library.path似乎对加载被显式加载的库的依赖dll没有影响。

我想在调用“loadLibrary”之前,我需要以某种方式修改java应用程序进程中的路径,以包含本地库的位置。

是否可以在应用程序代码中执行此操作?在搜索进程的路径元素之前,是否有任何方法使loadLibrary加载的dll先从其文件夹加载其依赖项?

共有1个答案

宫元徽
2023-03-14
    < li >一般来说,在JVM启动后,您不能更改“java.library.path ”(使用反射有一些肮脏的伎俩,但最好不要这样做)。 < li >可以使用< code > String arch data model = system . getproperty(" sun . arch . data . model ");来确定您的JVM是32位还是64位。 < li >您可以使用带有修改的< code>findLibrary方法的自定义< code>ClassLoader从正确的位置加载库。然而,这让你只能为加载的库本身指定路径,而不能为它的依赖项指定路径。您只能通过更改PATH环境变量或当前目录来更改依赖关系。
 类似资料:
  • 问题内容: 在Windows下运行的Python中编程时出现问题。我需要使用长度超过256个或whatsathelimit字符的文件路径。现在,我已经基本阅读了两种解决方案: 使用kernel32.dll中的GetShortPathName并以这种方式访问​​文件。 很好,但是我不能使用它,因为我需要以某种方式使用路径 其中short_path是一个非常短的路径(类似),而长路径则出现在目录本身中

  • 问题内容: 我只想在maven中更改jenkins项目的.m2路径。每当我构建项目时,.m2文件夹都位于c:\中,并且为空!没有settings.xml之类的东西… eclipse的.m2路径位于user.home中(没关系)。 但是,如何更改jenkins中.m2文件夹的路径? 感谢你们 ;-) 问题答案: 在Jenkin 的页面中的选项卡下,选择并单击。有一个复选框。如果选择此选项,Jenki

  • 本文向大家介绍修改maven本地仓库路径的方法,包括了修改maven本地仓库路径的方法的使用技巧和注意事项,需要的朋友参考一下 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找。对于依赖的包大家可以从这个地址进行搜索:http://mvnrepository.com/。  远程仓库是指其他服务器上的仓库,包括全球中央仓库,公司内部

  • 问题内容: 代表Windows目录的最佳方法是什么?我一直在尝试修改脚本,但是它永远无法正常工作,因为我似乎无法正确获得目录,我想是因为它充当转义符? 问题答案: 183 你可以始终使用: 这适用于linux和Windows。其他可能性是 如果你对某些名称有疑问,也可以尝试使用原始字符串文字: 但是,最佳实践是使用始终为你的操作系统选择正确配置的模块功能: 从python 3.4开始,你还可以使用

  • 通过此功能可以设置网站后台的访问路径 这里填写你需要设置的后台访问域名,例如:admin.domain.com 在该域名解析到您的网站服务器后,只能通过该域名登陆 配置保存在/caches/configs/system.php中,修改参数admin_url可手动取消绑定

  • 正在尝试安装ruby 1.9。3、阅读我需要先安装自制软件。运行brew doctor,它给了我很多警告。其中之一是: 警告: /usr/bin发生在 /usr/local/bin这意味着系统提供的程序将被使用,而不是Homebrew提供的程序。以下工具存在于两种路径中: 考虑修改你的路径,以便 /usr/local/bin在路径中领先于 /usr/bin。 一个人是如何做到这一点的?