java.lang.UnsatisfiedLinkError - 运行 z/OS 应用程序时

Posted

技术标签:

【中文标题】java.lang.UnsatisfiedLinkError - 运行 z/OS 应用程序时【英文标题】:java.lang.UnsatisfiedLinkError - when running z/OS application 【发布时间】:2018-03-19 05:39:02 【问题描述】:

当我尝试运行我的一个 Java 应用程序(部署在 IBM Websphere App 服务器中)时,我收到以下错误,

java.lang.UnsatisfiedLinkError: PATH/file.so (EDC5253S An AMODE64 应用程序正在尝试加载 AMODE31 DLL 加载模块。 (errno2=some_address)) 在 java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1344)

有人遇到过同样的 AMODE64 问题吗?

或者有人可以提供有关如何将代码编译为 AMODE64 的信息。

本文中的任何参考资料也会有很大帮助。

提前致谢。

【问题讨论】:

【参考方案1】:

在 z/OS 上,如果您使用的是语言环境,则不能有一个混合的单地址应用程序,该应用程序的某些部分编译为 31 位,而某些部分编译为 64 位。所有现代高级语言都使用语言环境(例如 C、C++、Java、COBOL、PL/I),所以这就是导致您的问题的原因。 根据您使用的 Java 版本,您可以切换到 31 位 JVM,或者(最好)将 C DLL 重新编译并重新链接为 64 位。

【讨论】:

是的..调试后我们知道了..我们已经将 Z/OS 中的 C DLL 重新编译为 64 位,现在应用程序可以正常工作..谢谢 :) 您可能想投票给我的或 F Rowe 的,以便人们可以看到有帮助的答案?【参考方案2】:

您询问了有关如何在 64-bt 模式下编译代码的信息,但通常,作为最终用户,您不会这样做,本机库/dll 的提供者会这样做,因为您需要源代码。您将上述错误消息中的库文件名替换为 PATH/file.so,因此我无法为您提供有关该库的提供者可能是谁的任何指导。使用库的名称,搜索提供程序,然后向他们询问以 64 位模式编译的库版本。 如果您拥有该库的代码,请参阅this IBM KnowledgeCenter topic 以获取有关如何在 64 位模式下编译和绑定代码的信息。

【讨论】:

@FRowe ..感谢您的信息..我有库的源代码..它是一个在大型机中编译的简单 c 文件..生成的库是从 java 调用的。 .以前我们有 31 位 z/OS,现在我们已经升级到 64 位 ..因此我们得到了 AMODE64 错误..我怀疑,有没有办法仍然使用 31 位库(比如保留一些标志) 还是我应该重新编译它并创建一个新库? 既然你有源代码,你应该可以按照上述IBM KC主题中的说明在64位模式下重新编译。 我也在检查同一个链接..感谢您的帮助:)

以上是关于java.lang.UnsatisfiedLinkError - 运行 z/OS 应用程序时的主要内容,如果未能解决你的问题,请参考以下文章