在AIX 6.1 ppc64上,为了加载libm.a,我们的应用程序使用System.loadLibrary("m")
否则会失败并显示错误消息

模块的幻数无效

根据IBM文档,当32位和64位二进制文​​件之间不匹配时,可能会发生这种情况。还是无论我们使用Java6(32位)还是Java6_64(64位)JVM,都会发生这种情况。
事实并非如此。

另一个可能的原因是/usr/lib/libm.a不是共享库。但是我们只是在平台上找不到共享模式的libm.a来使用!

根据Javadoc,在System.loadLibrary(“name”)中,“name”到真实库的映射取决于系统。在大多数Unix系统上,它映射到lib.so,而在AIX上,它映射到lib.a;请注意,在AIX上,.a可以是混合的,即。它可以包含静态和共享对象,32位以及64位对象。我的问题是在AIX上找到共享模式libm.a。

有人知道如何使用System.loadLibrary("m")加载libm.a吗?

压力System.loadLibrary("m")在我们测试过的大多数UNIX平台上都可以正常工作。

最佳答案

您可以使用“dump -H”(AIX等效于ldd)来验证libm.a是共享库。 “文件”命令应区分32位和64位库,但是AIX在一个库中还支持32位和64位混合。如果文件看起来正常,请检查您的应用是否正在使用“truss”加载正确的libm。

10-06 14:36