0

我尝试按照以下网址的教程使用带有 DRMAA api 的 sun Grid 引擎:http: //gridscheduler.sourceforge.net/howto/drmaa_java.html。为此,我需要加载位于 /srv/sge/lib/lx24-amd64/drmaa.so 中的 c 库。现在我使用以下代码执行我的命令:java -jar scriptName.jar -Dshared.library.path=/srv/sge/lib/lx24-amd64/ 如https://blogs.oracle.com/templedf/entry/中所述drmaa_and_the_shared_library。但我仍然得到这个例外:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:java.library.path 中没有 drmaa

尝试检索会话时会引发此异常:

session = SessionFactory.getFactory().getSession();

操作系统是 linux 64 位,java 是 64 位,SGE 是 64 位,所以这都是兼容的。

有谁知道出了什么问题?

4

3 回答 3

0

这种情况似乎是在某些发行版中 libdrmaa.so 有一个库版本号 libdrmaa.so.1.0 而没有版本号的 libdrmaa.so 丢失了。drmaa.jar 似乎只是在寻找没有的那个。您可以使用以下命令检查系统中可用的 libdrmaa.so 库

# ldconfig -p | grep libdrmaa

哪个(在我的情况下)要么说

libdrmaa.so.1.0 (libc6,x86-64) => /lib64/libdrmaa.so.1.0

或者

libdrmaa.so.1.0 (libc6,x86-64) => /lib64/libdrmaa.so.1.0
libdrmaa.so (libc6,x86-64) => /lib64/libdrmaa.so

第二种情况很好!

对于 Fedora 发行版,我将其报告为一个错误,似乎他们很快会在 F18 和 F19 中修复它。https://bugzilla.redhat.com/show_bug.cgi?id=671880

在 Fedora 中很容易修复,只需安装包含此软链接的包“gridengine-devel”。

如果没有版本号的 libdrmaa.so 不存在并且您在另一个发行版上,您可以通过键入以系统管理员身份手动修复它

# cd /usr/lib64
# sudo ln -sf libdrmaa.so.1.0 libdrmaa.so
# sudo ldconfig
于 2013-08-01T09:03:00.147 回答
0

您将要更改shared.library.pathjava.library.path(我认为这是您引用的博客文章中的错误。

此外,将开关放在命令中的-D开关之前-jar,否则它将被解释为 jar 文件中主函数的参数,而不是 JVM 的参数。

因此,您的示例命令现在应该如下所示:

java -Djava.library.path=/srv/sge/lib/lx24-amd64/ -jar scriptName.jar 
于 2013-04-30T00:06:23.160 回答
0

以前的答案都不适合我。我已经设法解决了这个问题,在我的环境中定义了以下变量

export LD_LIBRARY_PATH=<path to the drmaa lib>
于 2014-08-21T11:54:31.173 回答