首先,要详细解释我已经尝试过的方法:
我正在一个基于java的windows编程平台上工作,该平台提供对自定义java函数的访问,还有其他几个扩展。在这个建模平台的源代码中,有一个类"CVODE“,它允许访问本机库"cvode”来导入C++库CVODE的功能。
//imports
public class CVODE {
static {
Native.register("cvode");
}
public static native int ... //methods
}我从CVODE库创建了共享库,这导致了2个文件: sundials_cvode.dll和sundials_nvecserial.dll。
将第一个库添加到我的java路径显然会导致
Unexpected Exception UnsatisfiedLinkError: Unable to load library 'cvode': The specified module could not be found.因为名字不兼容。因此,我将sundials_cvode.dll的名称更改为cvode.dll,并重新尝试。导致错误,指示库sundials_cvode.dll中并不存在所有方法:
Unexpected Exception UnsatisfiedLinkError: Error looking up function 'N_VDestroy_Serial': The specified procedure could not be found.这让我确信库是正确地被找到和加载的,但是并不是所有的方法都可用。通过检查所讨论的dll,我得出结论,CVODE类需要来自sundials_cvode.dll和sundials_nvecserial.dll库的函数。因此,我尝试将平台源代码更改为
public class CVODE {
static {
Native.register("sundials_cvode");
Native.register("sundials_nvecserial");
}
public static native int ... //methods
}这仍然会导致
Unexpected Exception UnsatisfiedLinkError: Error looking up function 'N_VNew_Serial': The specified procedure could not be found.我已经确认这个方法同时存在于类文件和dll中:

因此,我只能猜测两次调用Native.register()的错误结果。导致第二个库没有加载,或者出现错误。我想了解一下我做错了什么,或者如何才能更好地了解到底出了什么问题。
发布于 2016-01-19 14:19:46
据我所知,每个类只能加载一个dll,即将类拆分为两个,每个类都提供特定dll提供的方法。
https://stackoverflow.com/questions/34878608
复制相似问题