Java JNI,一个dll的多个版本:如何指定哪个dll被用于本机调用(matlab jvm)
Java JNI, multiple versions of a dll: How to specify which dll is being used for native calls (matlab jvm)
我面临特殊情况。我正在尝试在 matlab 中 运行 一个 java 应用程序。我的应用程序使用依赖于另一个 dll (xerces-c_3_2.dll) 的外部 dll。我的问题是 matlab 在其根文件夹中还包含一个 xerces-c_3_2.dll。
很遗憾,这两个dll文件是不同的!无法以某种方式更改 matlab 中 jvm 的库路径,dll 的 'matlab' 版本不会隐藏我的 dll 版本(它会在 matlab 启动时自动加载)。因此,我的应用程序总是抛出无法找到过程的异常,因为它使用了错误的版本。
由于 matlab 不会以我的 dll 版本启动,我现在的想法是将 dll 重命名为 'xerces-c_3_2_myVersion.dll' 并冗余加载它。
如何告诉 jvm 对于特定的 jni 调用应该使用哪个本机接口?
在我的jni接口中已知
public final static native
行已定义,但我从未遇到过在冗余本机函数的情况下如何指定 dll 的问题?
有什么想法吗?谢谢!
斯文
我已经解决了我的问题:
- 我将我的 dll 文件版本从 'xerces-c_3_2.dll' 重命名为 'xerces-c_3_s.dll'
- 我在十六进制编辑器中修改了我编译的个人 dll 并更改了依赖项 acc。到 (1)
中的命名
- 我在 matlab 中使用 java 加载了修改后的 dll 和更改的依赖项。现在一切正常!
所以从技术上讲,它更像是一个 windows 图书馆的东西,而不是一个 java 的问题。
我面临特殊情况。我正在尝试在 matlab 中 运行 一个 java 应用程序。我的应用程序使用依赖于另一个 dll (xerces-c_3_2.dll) 的外部 dll。我的问题是 matlab 在其根文件夹中还包含一个 xerces-c_3_2.dll。
很遗憾,这两个dll文件是不同的!无法以某种方式更改 matlab 中 jvm 的库路径,dll 的 'matlab' 版本不会隐藏我的 dll 版本(它会在 matlab 启动时自动加载)。因此,我的应用程序总是抛出无法找到过程的异常,因为它使用了错误的版本。
由于 matlab 不会以我的 dll 版本启动,我现在的想法是将 dll 重命名为 'xerces-c_3_2_myVersion.dll' 并冗余加载它。
如何告诉 jvm 对于特定的 jni 调用应该使用哪个本机接口?
在我的jni接口中已知
public final static native
行已定义,但我从未遇到过在冗余本机函数的情况下如何指定 dll 的问题?
有什么想法吗?谢谢! 斯文
我已经解决了我的问题:
- 我将我的 dll 文件版本从 'xerces-c_3_2.dll' 重命名为 'xerces-c_3_s.dll'
- 我在十六进制编辑器中修改了我编译的个人 dll 并更改了依赖项 acc。到 (1) 中的命名
- 我在 matlab 中使用 java 加载了修改后的 dll 和更改的依赖项。现在一切正常!
所以从技术上讲,它更像是一个 windows 图书馆的东西,而不是一个 java 的问题。