java.library.path对linux上的IntelliJ没有影响

时间:2017-02-10 08:34:52

标签: java linux intellij-idea java.library.path

我在linux上遇到java.library.path的一个奇怪问题,我不确定问题是出于IntelliJ的想法,还是java.library.path在windows上使用的方式不同Linux操作系统。

设置是在Intellij中我创建了一个简单的JUnit4测试用例,如下所示:

     System.out.println("java.library.path = " + System.getProperty("java.library.path"));
    System.out.println("LD_LIBRARY_PATH = " + System.getenv("LD_LIBRARY_PATH"));

    String directory = Paths.get("../../../../test-project/linux32").toAbsolutePath().toRealPath().toString();

    System.out.println("Loading: " + directory + "/dummy.so" + " with System.load(..)");
    System.load(directory + "/dummy.so");
    System.out.println("SUCCESS!");

    System.out.println("Loading: " + "dummy" + " with System.loadLibrary(..)");
    System.loadLibrary("dummy");
    System.out.println("SUCCESS!");

为了设置给定测试用例的java.library.path,我转到Edit Configurations...并在-ea -Djava.library.path=</path/to/directory/containing/dummy.so>中设置VM options,但在运行测试用例后,这是输出:

java.library.path = </path/to/directory/containing/dummy.so>
LD_LIBRARY_PATH = </path/to/directory/containing/dummy.so>
Loading: </path/to/directory/containing/dummy.so>/dummy.so with System.load(..)
SUCCESS!
Loading: dummy with System.loadLibrary(..)

java.lang.UnsatisfiedLinkError: no dummy in java.library.path

    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at LoadLibraryTest.loadLibraryTest(LoadLibraryTest.java:21)

正如您所看到的,我首先尝试使用System.load(...)加载库,但我也尝试在LD_LIBRARY_PATHEnvironment variables设置Edit Configurations...java.library.path相同的目录没有任何成功。由于给定的java.lang.UnsatisfiedLinkError: no dummy in java.library.path错误,该问题与未找到的依赖库无关。

当我在Windows中尝试相同的设置时,一切正常,只要我正确设置了java.library.path,就可以成功加载库。如果java.library.path不正确,那么测试在Windows上也会失败。无论是否设置LD_LIBRARY_PATHjava.library.path,我都尝试了两者,并且两者的每个组合都没有改变linux上的结果。似乎设置java.library.path对linux没有影响,但我不知道这是IntelliJ中的错误还是与linux相关的错误。

修改

在此处显示的原始测试用例中,库被称为libdummy.so,在这种情况下,只需删除调用lib中的System.loadLibrary前缀,但在我的实际情况中,库没有lib前缀,所以我现在相应地更新了测试用例并重新编译了名为dummy.so的测试库,现在测试用例再次失败并再次出现相同的错误,如上所述。感谢KC Wong的这个提示!

提前感谢您对此事的任何帮助!

-Martin

0 个答案:

没有答案