在AIX 6.1上,Java System.loadLibrary(“m”)失败

时间:2012-01-22 13:34:45

标签: java native aix loadlibrary

在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吗?

P.S System.loadLibrary("m")在我们测试过的大多数UNIX平台上都能正常工作。

1 个答案:

答案 0 :(得分:0)

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