合并/绑定DLL/LIBs(C++/Java)

合并/绑定DLL/LIBs(C++/Java),java,c++,dll,Java,C++,Dll,我们目前使用的软件产品为他们的软件发布dll和lib文件,但他们没有给我们源代码。他们的文件是用C编写的。我们用VS2010编写了一个用于C++软件的DLL包装器,并将所有DLL输出到java项目。然后,我们使用System.loadLibrary调用在Java中加载所有DLL。一切正常 问题是,该软件公司将发布“更新”版本的软件Ex v1.0、v2.5等,尽管版本不同,但其dll的名称是相同的。因此,我们在Java中使用System.loadLibrary调用时遇到错误,因为它不知道引用哪一个

我们目前使用的软件产品为他们的软件发布dll和lib文件,但他们没有给我们源代码。他们的文件是用C编写的。我们用VS2010编写了一个用于C++软件的DLL包装器,并将所有DLL输出到java项目。然后,我们使用System.loadLibrary调用在Java中加载所有DLL。一切正常

问题是,该软件公司将发布“更新”版本的软件Ex v1.0、v2.5等,尽管版本不同,但其dll的名称是相同的。因此,我们在Java中使用System.loadLibrary调用时遇到错误,因为它不知道引用哪一个,因为它们的名称都相同

我可以看到显式地将VM参数设置为指向特定的lib文件夹,其中包含我们想要的版本,例如:-Djava.library.path=lib\v1\u 0。问题是我们需要在同一个java应用程序中运行所有版本,例如:v1.0、v2.5等

因此,我最好的猜测是尝试捆绑/合并dll,这样每个版本只发布1个dll,包含包装dll及其所有dll或库,并且该dll将被唯一命名。有人知道怎么做,或者有更好的建议吗


谢谢

使用Maven和Maven NAR插件来管理依赖地狱。

感谢您的输入,但我不确定这是否适用于这种情况。Java应用程序将作为可执行jar发布到客户端。主程序将是一个GUI,允许用户在运行程序时选择要使用的软件程序版本。因此,他们可能会选择V1.0,运行程序,完成后,他们可能会选择v2.5,运行程序,并最终在完成后关闭GUI。嗯,您可以绑定多个版本并动态设置库路径。我不确定我是否完全遵循了。。。“捆绑多个版本”是指为每个软件版本创建不同的jar/gui吗?如果是这样,那就不可能了,因为这个线程范围之外的其他约束:太糟糕了。也许你得再详细一点。我不知道还有什么要详细说明。简而言之,我正在寻找一种方法,为第三方软件的每个版本唯一地捆绑一组DLL。我将在java程序中同时使用这些捆绑包的所有版本。有没有一种方法可以动态加载/卸载DLL?如果是这样,这可以作为一个解决方案。因此,如果有人选择“V1.0”并运行该程序,它将以某种方式加载正确的dll包,然后在运行完成后卸载它。然后有人可以选择“V2.5”并运行程序,它将加载正确的dll包,然后在运行完成后卸载它,等等……嗯,不幸的是,我认为我无法删除静态引用。它们本质上与对静态C代码的JNI静态调用相关联。另一种解决方法是在不同的JVM中加载每个版本的软件,并与正确的JVM进行来回对话吗?有什么想法吗?