Возникли проблемы при настройке java.library.path для Jython
Я работаю с устаревшим кодом на работе. Пытаясь запустить скрипты python в нашем коде через Jython, я получаю UnsatisfiedLinkError. Я пытался использовать опцию "-D", чтобы установить опцию java.class.path, но, похоже, это не помогло. Для следующего примера Durandal.jar
доступно под C:\scm\main\core\isidurandal\durandal\build
"C:\Program Files\Java\jdk1.6.0_31\bin\java.exe" -Xint "-Dpython.path=c:\scm\main\core\isidurandal\durandal\scripts\lib" "-Dpython.home=c:\bin\jython2.5.2" "-Djava.library.path=c:\scm\main\core\isidurandal\durandal\build" -classpath "c:\bin\jython2.5.2\jython.jar;c:\scm\main\core\isidurandal\durandal\build\durandal.jar;c:\scm\main\core\isidurandal\japanese\build\durandalJapanese.jar;c:\scm\main\core\isidurandal\biometrics\build\MtiBiometrics.jar" org.python.util.jython tools\alignSequences.py
=========================================================
Monolithic library init failed with UnsatisfiedLinkError:
java.lang.UnsatisfiedLinkError: no durandal in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at com.interactivesys.durandal.base.Library.<clinit>(Unknown Source)
at com.interactivesys.durandal.recognition.Library.<clinit>(Unknown Sour
ce)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.python.core.Py.loadAndInitClass(Py.java:895)
at org.python.core.Py.findClassInternal(Py.java:830)
at org.python.core.Py.findClassEx(Py.java:881)
at org.python.core.packagecache.SysPackageManager.findClass(SysPackageMa
nager.java:133)
at org.python.core.packagecache.PackageManager.findClass(PackageManager.
java:28)
at org.python.core.packagecache.SysPackageManager.findClass(SysPackageMa
nager.java:122)
at org.python.core.PyJavaPackage.__findattr_ex__(PyJavaPackage.java:137)
at org.python.core.PyObject.__findattr__(PyObject.java:863)
at org.python.core.imp.import_name(imp.java:849)
at org.python.core.imp.importName(imp.java:884)
at org.python.core.ImportFunction.__call__(__builtin__.java:1220)
at org.python.core.PyObject.__call__(PyObject.java:357)
at org.python.core.__builtin__.__import__(__builtin__.java:1173)
at org.python.core.imp.importFromAs(imp.java:978)
at org.python.core.imp.importFrom(imp.java:954)
at org.python.pycode._pyx0.f$0(tools\alignSequences.py:18)
at org.python.pycode._pyx0.call_function(tools\alignSequences.py)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1261)
at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:235
)
at org.python.util.jython.run(jython.java:247)
at org.python.util.jython.main(jython.java:129)
Traceback (most recent call last):
File "tools\alignSequences.py", line 1, in <module>
from com.interactivesys.durandal.recognition import Library
java.lang.UnsatisfiedLinkError: com.interactivesys.durandal.base.ResourceLocator
.resolvePath(Ljava/lang/String;)Ljava/lang/String;
at com.interactivesys.durandal.base.ResourceLocator.resolvePath(Native M
ethod)
at com.interactivesys.durandal.base.Library.<clinit>(Unknown Source)
at com.interactivesys.durandal.recognition.Library.<clinit>(Unknown Sour
ce)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.python.core.Py.loadAndInitClass(Py.java:895)
at org.python.core.Py.findClassInternal(Py.java:830)
at org.python.core.Py.findClassEx(Py.java:881)
at org.python.core.packagecache.SysPackageManager.findClass(SysPackageMa
nager.java:133)
at org.python.core.packagecache.PackageManager.findClass(PackageManager.
java:28)
at org.python.core.packagecache.SysPackageManager.findClass(SysPackageMa
nager.java:122)
at org.python.core.PyJavaPackage.__findattr_ex__(PyJavaPackage.java:137)
at org.python.core.PyObject.__findattr__(PyObject.java:863)
at org.python.core.imp.import_name(imp.java:849)
at org.python.core.imp.importName(imp.java:884)
at org.python.core.ImportFunction.__call__(__builtin__.java:1220)
at org.python.core.PyObject.__call__(PyObject.java:357)
at org.python.core.__builtin__.__import__(__builtin__.java:1173)
at org.python.core.imp.importFromAs(imp.java:978)
at org.python.core.imp.importFrom(imp.java:954)
at org.python.pycode._pyx0.f$0(tools\alignSequences.py:18)
at org.python.pycode._pyx0.call_function(tools\alignSequences.py)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1261)
at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:235
)
at org.python.util.jython.run(jython.java:247)
at org.python.util.jython.main(jython.java:129)
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: com.interactives
ys.durandal.base.ResourceLocator.resolvePath(Ljava/lang/String;)Ljava/lang/Strin
g;
Насколько я понимаю, эта ошибка обычно возникает, когда кто-то пытается получить доступ к библиотеке, которой нет в пути к классам, но я думаю, что я правильно установил ее в командной строке. Опять же, я также еще не очень знаком с Jython (не очень знаком с Java или Python), поэтому я немного в море.
Изменить: Похоже, это может быть проблема с попыткой запустить 32-битную DLL под 64-битной Java. Я пересмотрю свой вопрос, если это окажется так.
1 ответ
Действительно, ответ, как выясняется, состоит в том, что это была 32-битная DLL, и я пытался запустить ее с 64-битной Java. Не очень понятные сообщения об ошибках...