Jython UnsatisfiedLinkError对共享库中的本机方法调用

jbr*_*don 5 java java-native-interface swig jython

首先,这是正在工作的,然后我将描述什么不是:使用SWIG,我们已经采用了一些第三方代码,并创建了Java和C包装器源.创建了Java类的jar文件和C包装器代码的共享库.我们有一个Java代码库来加载共享库,并且能够根据需要调用本机代码.这是在Sun HostSpot JVM 1.5.0.14上运行的.不用担心.

现在,这不起作用:使用相同的JVM,带有Java包装器代码的jar文件和上面描述的相同共享库,我试图使用Jython来做一些脚本.CLASSPATH和LD_LIBRARY_PATH环境变量已正确设置.从Jython,我能够运行java.lang.System.loadLibrary(...),并加载共享库而不会出错.但是,当我在Jython脚本中为Java对象调用此库中的第一个本机方法时,我从JVM 获得了一个UnsatisfiedLinkError.

我在共享库上运行了nm,我发现有问题的方法存在于库中(对于JNI规范中描述的本机方法,名称为mangling).那么,问题是,什么可以阻止JVM解析方法名称?

我已经完成了JNI规范,我发现GC可以卸载一个库.在我调用方法之前会发生这种情况吗?还有什么可以导致这种失败?

小智 0

我以前也遇到过这个问题。就我而言,正在加载的 DLL/.so 库具有未找到的进一步依赖项,并且错误消息仅报告了我尝试加载的库。我使用下面的工具来找出缺少的依赖项。

如果您使用的是 Windows,请使用进程监视器http://technet.microsoft.com/en-us/sysinternals/bb896645查看应用程序正在搜索的确切 DLL。您需要启动 Process Monitor,然后运行您的应用程序并过滤日志以查看您的应用程序正在寻找哪些 dll。

如果您使用的是 Linux,请使用 strace ( http://en.wikipedia.org/wiki/Strace ) 并查看缺少哪个共享库。