DRMAA и shared.library.path

Я пытаюсь использовать движок Sun Grid с API-интерфейсом DRMAA, следуя учебному пособию по адресу: http://gridscheduler.sourceforge.net/howto/drmaa_java.html. Для этого мне нужно загрузить библиотеку c, расположенную в /srv/sge/lib/lx24-amd64/drmaa.so. Теперь я выполняю свою команду с этим кодом: java -jar scriptName.jar -Dshared.library.path=/srv/sge/lib/lx24-amd64/, как описано в https://blogs.oracle.com/templedf/entry/drmaa_and_the_shared_library. Но все же я получаю это исключение:

Исключение в потоке "main" java.lang.UnsatisfiedLinkError: нет drmaa в java.library.path

Это исключение выдается при попытке получить сеанс:

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

ОС Linux 64-битная, Java 64-битная и SGE 64-битная, так что это все совместимо.

Кто-нибудь знает, что идет не так?

3 ответа

Кажется, дело в том, что в некоторых дистрибутивах 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

Вы хотите изменить shared.library.path в java.library.path (Я считаю, что это ошибка в сообщении в блоге, на которое вы ссылались.

Кроме того, поместите -D переключиться перед -jar включите вашу команду, иначе она будет интерпретироваться как аргумент основной функции в файле jar, а не как аргумент JVM.

Итак, ваш пример команды теперь должен выглядеть так:

java -Djava.library.path=/srv/sge/lib/lx24-amd64/ -jar scriptName.jar 

Ни один из предыдущих ответов не работал для меня. Мне удалось решить эту проблему, определив в моей среде следующую переменную

export LD_LIBRARY_PATH=<path to the drmaa lib>
Другие вопросы по тегам