Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有不同平台的本机库的Java项目_Java_Eclipse - Fatal编程技术网

具有不同平台的本机库的Java项目

具有不同平台的本机库的Java项目,java,eclipse,Java,Eclipse,我有一个java项目,它使用不同的平台,因此需要包含不同的本机库。现在我想设置eclipse项目以自动选择正确的库。在.classpath文件中,可以指定一个本机位置: <classpathentry kind="lib" path="lib/jogl/jar/jogl.all.jar"> <attributes> <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRAR

我有一个java项目,它使用不同的平台,因此需要包含不同的本机库。现在我想设置eclipse项目以自动选择正确的库。在
.classpath
文件中,可以指定一个本机位置:

<classpathentry kind="lib" path="lib/jogl/jar/jogl.all.jar">
    <attributes>
        <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="de.yogularm.desktop/lib/jogl/windows-amd64"/>
    </attributes>
</classpathentry>

如果multiply classpathentries指定本机位置,Eclipse也会尝试为其他平台加载库,但失败


如何让eclipse选择目录?我想分享这个项目,并尽可能简化后续开发人员的设置。

我可能错了,但我认为本机库是DLL、共享对象等,根本不走类路径。每个环境都有一个路径变量之类的东西,需要包含本机库。用户可能需要进行某些配置(在Eclipse中或通过环境变量)。

在类路径、系统路径和属性
java.library.PATH
中不会搜索库


在您的情况下,可能是自定义实现,尤其是
findLibrary(..)
loadLibrary(..)
方法。这将允许根据检测到的操作系统选择适当的库。

Eclipse缺少您想要的功能。因此,您可以从Java来实现它

不要调用
System.loadLibrary
,而是调用
System.load
。这要求您编写代码,根据当前平台计算正确的路径名。您需要使用-D传递一个值来说明当前平台是什么,或者从文件中读取它

这将从等式中删除
java.library.path


如果您的JNI库具有依赖项,则还需要设置PATH、LD_library_PATH或DYLD_library_PATH。除非你采取更进一步的措施去看。但是,对于Windows,延迟加载程序的必要机制不在其中。

您可以创建几个.classpath文件(.classpath\u Windows、.classpath\u Linux等),然后创建到所需版本(Win/Lin/Mac)的符号链接,名为“.classpath”

当您想要更改任何.classpath_uuxxxxxxx中的任何条目时,问题就会出现-然后您必须更新其他.classpath文件。

本机路径不包含在类路径中,它们只是在类路径文件中声明。Eclipse在调试时将它们用作PATH变量。只使用一个平台,这是没有问题的,而且肯定是预期的方式。很好的一点-我显然没有足够仔细地阅读这个问题。你试过吗?这是一个很好的选择,但它缺乏对64位和32位系统的支持。非常有趣的答案,我很快就会尝试。如我所见,我必须更改引用库的代码,这是不可行的。但是如果我自己写这个库,你的答案将是完美的。你为什么要更改引用库的代码?我这样做的时候没有。库gluegen会在类初始化时尝试调用loadLibrary(),即使我在调用该类之前加载了本机库。哦,是的,这将是一个问题。谢谢,这为我做到了。