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>