AIX 6.1 ppc64では、libm.aをロードするために、アプリケーションでSystem.loadLibrary("m")
が使用されます。 それとも、モジュールは32ビットと64ビットのバイナリとの間に不一致がある場合にこの現象が発生することができ、IBMの資料によると、無効なマジックナンバーAIX 6.1でJava System.loadLibrary( "m")が失敗する
を持っているエラーメッセージ
で失敗します。これは、Java6(32ビット)またはJava6_64(64ビット)のJVMを使用する場合でも発生します。 そうではありません。
もう1つの考えられる原因は
/usr/lib/libm.a
です。共有ライブラリではありません。しかし、私たちは使用するプラットフォーム上で共有モードlibm.a
を見つけることができません!System.loadLibrary( "name")のJavadocに準拠しているため、実際のライブラリへの "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プラットフォームで問題なく動作します。
Linux/Unix環境では通常はコンパイルされた静的オブジェクトで、バイナリ形式でリンクする必要があるファイルは「.a」で終わるファイルではありませんか? AFAIK、共有オブジェクト(動的ライブラリ)は.soで終わります。 – esaj
共有ライブラリは動的にしかロードできません。 '.a'ライブラリをプログラムにコンパイルする必要があります。 JVMの場合は、JVMをビルドします。 –
Javadocへのアクセス、System.loadLibrary( "name")では、実際のライブラリへの "name"のマッピングはシステムによって異なります。ほとんどのUnixシステムでは、lib .soにマッピングされ、AIXではlib .aにマップされます。 AIXでは、.aはハイブリッドであることに注意してください。静的オブジェクトと共有オブジェクトの両方、32ビットオブジェクトと64ビットオブジェクトを含むことができます。私の問題は、AIX上の共有モードlibm.aを見つけることです... –