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

JNI DLL如何搜索其依赖的本机DLL?

田文景
2023-03-14

假设我有jni.dll。它取决于native.dll。现在我的Java应用程序调用system.loadLibrary(“jni”)

下面的文件夹布局工作吗?

MainFolder
    |--main.exe
    |--SubFolder
          |--JNI.dll
          |--native.dll

“第一级”:

System.LoadLibrary(“jni”)使用JVM属性java.library.path定位jni.dll

“第二级”:

这是正确的吗?

如果将%_java_options%设置为-djava.library.path=mainfolder\subfolder,我认为它可以覆盖对jni.dll的搜索。但是它是否也包括对native.dll的搜索?

从这里看来,我对两个层次的猜测得到了证实:如何在Eclipse启动时将本机库添加到“java.library.path”(而不是重写它)

参见凯文·克莱恩的评论。但是使用LD_LIBRARY_PATH环境变量的上述解决方案仅适用于Linux。

我想我没有把我的问题说清楚。让我这么说吧。

我的困惑是:jni.dll依赖于native.dll。它们都不在main.exe的当前工作目录中。实际上,它们在CWD的子文件夹中。

但是如果我从Eclipse运行我的项目,除了设置java.library.path,我还必须将“\mainfolder\subfolder”放在%path%环境变量中。

我只是不知道为什么Eclipse如此不同。

共有1个答案

谢奕
2023-03-14

1)在当前目录中搜索。

2)系统文件夹通常为C:\windows\system32(使用CSIDL_SYSTEM和shgetSpecialFolderPath()获取给定系统上的rigth文件夹)

3)Windows文件夹(C:\Windows)(CSIDL_WINDOWS withshgetSpecialFolderPath()以获得给定系统上的正确文件夹)

4)PAth environmnet变量下列出的所有文件夹

 类似资料:
  • 所以我有一个问题,那就是--Maven似乎忽略了依赖关系,尽管它们在层次结构中应该是可见的。 我有以下项目层次结构: 父级 --proja --sub-parent1 ---projb ---projc 所有级别都通过标记链接。将和声明为模块,没有声明依赖项。但是依赖于。构建整个模块不会构建,这很奇怪,因为知道,而知道,并且知道依赖关系()。但是当我构建整个或例如时,maven不会构建它。 编辑:

  • 我在找一个android gradle Dependancie。 网站http://gradleplease.appspot.com/似乎停止工作。 有类似的网站吗? 否则,搜索特定库的提示?

  • 我正在使用Eclipse Luna和m2e插件。当我搜索依赖项时,我得到以下警告(也请参见后面的截图): 索引下载被禁用,搜索结果可能不完整。 如何启用索引下载?

  • 在我的另一个工作区,对于我现有的项目,我没有这个问题。 有办法解决吗?

  • 12:40:34:正在执行任务“jar”... 任务:包装器 在0s中生成成功1个可操作任务:1个已执行

  • 我们有一个项目a依赖于项目B,项目B依赖于图书馆C。a和B是本地项目,而C是maven central repo的公共图书馆。 波姆。xml用于: 波姆。用于B的xml: 在A中运行mvn dependency:tree-Dverbose时,它不会解析B的依赖项,B中使用的此类依赖项也不会显示在A的Maven依赖项中。这对于编译很好,但在运行时会因为NoClassDefFound错误而失败。 有没