在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平台上都能正常工作。
答案 0 :(得分:0)
您可以使用'dump -H'(AIX等效于ldd)来验证libm.a是否为共享库。 'file'命令应区分32位和64位库,但AIX还在一个库中支持混合32位和64位。如果文件看起来没问题,请使用“truss”检查您的应用是否正在加载正确的libm。