Сбой Java System.loadLibrary ("m") в AIX 6.1 - PullRequest
4 голосов
/ 22 января 2012

В 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-битный объект. Моя проблема - найти общий режим libm.a в AIX.

Кто-нибудь знает, как использовать System.loadLibrary("m") для загрузки libm.a?

P.S System.loadLibrary("m") отлично работает на большинстве протестированных нами платформ UNIX.

1 Ответ

0 голосов
/ 22 февраля 2012

Вы можете использовать 'dump -H' (эквивалент AIX для ldd), чтобы убедиться, что libm.a является разделяемой библиотекой.Команда 'file' должна различать 32- и 64-битные библиотеки, но AIX также поддерживает гибридные 32- и 64-битные библиотеки в одной библиотеке.Если файл выглядит нормально, проверьте, что ваши приложения загружают правильную библиотеку libm, используя 'truss'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...