неправильный класс ELF: ELFCLASS32 - PullRequest
9 голосов
/ 30 мая 2011

Я получаю эту ошибку, указывающую на какой-то файл .so при запуске моего приложения на компьютере Solaris.Тем не менее, приложение отлично работает на моем компьютере с Windows.Если я не ошибаюсь, мое приложение ожидает 64-разрядную версию, но у меня есть только 32-разрядная версия файла .so на компьютере Solaris.Есть ли способ, которым я могу это исправить, чтобы он вместо этого использовал 32-битную версию?Я понимаю, что это не имеет ничего общего с байт-кодами, но, вероятно, с JVM.Я попытался запустить с использованием -d32 или -d64, но это не имеет никакого эффекта.

ОБНОВЛЕНИЕ:

Это точная ошибка:

Exception in thread "main" java.lang.UnsatisfiedLinkError: librvjs11.so: ld.so.1: java: fatal: librvjs11.so: wrong ELF class: ELFCLASS32<br>
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)<br>
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)<br>
    at java.lang.ClassLoader.loadLibrary(Unknown Source)<br>
    at java.lang.Runtime.loadLibrary0(Unknown Source)<br>
    at java.lang.System.loadLibrary(Unknown Source)<br>

Я уже обновил LD_LIBRARY_PATHпоэтому он включает каталог, содержащий файл выше.

Ответы [ 2 ]

8 голосов
/ 30 мая 2011

На основании разговора в другом ответе было сделано заключение, что JVM была 64-битным процессом.Это было подтверждено с помощью команды pflags в Solaris.

Очевидно, флаг -d32, передаваемый в JVM, игнорировался.Это было связано с тем, что JVM была 64-битной, которая была неспособна работать в 32-битном режиме.Таким образом, может быть разрешено установить 32-разрядную версию JVM и использовать ее.

3 голосов
/ 30 мая 2011

Мне кажется, что ваше приложение использует библиотеку, которая имеет собственные предварительно скомпилированные двоичные файлы, и они 32-битные.

Вы можете либо получить 64-битную версию двоичных файлов, либо заставить java работать в 32-битной версии, что и должен делать -d32. Однако может ли jvm на этом компьютере работать в 32-разрядной версии? Если это невозможно, то -d32 заставит Java выдать предупреждение о том, что он не может работать в 32-разрядной версии и будет продолжаться в 64-разрядной версии. Вы получаете это предупреждение?

Я CW, так как Vineet делает всю помощь.

...