在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。