首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JNA将多个.dll库注册到单个java类中

使用JNA将多个.dll库注册到单个java类中
EN

Stack Overflow用户
提问于 2016-01-19 13:52:23
回答 1查看 1.4K关注 0票数 1

首先,要详细解释我已经尝试过的方法:

我正在一个基于java的windows编程平台上工作,该平台提供对自定义java函数的访问,还有其他几个扩展。在这个建模平台的源代码中,有一个类"CVODE“,它允许访问本机库"cvode”来导入C++库CVODE的功能。

代码语言:javascript
复制
//imports
public class CVODE {

    static {
        Native.register("cvode");
    }
    public static native int ... //methods
}

我从CVODE库创建了共享库,这导致了2个文件: sundials_cvode.dll和sundials_nvecserial.dll。

将第一个库添加到我的java路径显然会导致

代码语言:javascript
复制
Unexpected Exception UnsatisfiedLinkError: Unable to load library 'cvode': The specified module could not be found.

因为名字不兼容。因此,我将sundials_cvode.dll的名称更改为cvode.dll,并重新尝试。导致错误,指示库sundials_cvode.dll中并不存在所有方法:

代码语言:javascript
复制
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库的函数。因此,我尝试将平台源代码更改为

代码语言:javascript
复制
public class CVODE {

    static {
        Native.register("sundials_cvode");
        Native.register("sundials_nvecserial");
    }
    public static native int ... //methods
}

这仍然会导致

代码语言:javascript
复制
Unexpected Exception UnsatisfiedLinkError: Error looking up function 'N_VNew_Serial': The specified procedure could not be found.

我已经确认这个方法同时存在于类文件和dll中:

因此,我只能猜测两次调用Native.register()的错误结果。导致第二个库没有加载,或者出现错误。我想了解一下我做错了什么,或者如何才能更好地了解到底出了什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 14:19:46

据我所知,每个类只能加载一个dll,即将类拆分为两个,每个类都提供特定dll提供的方法。

另见此处:https://stackoverflow.com/a/32630857/1274747

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34878608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档