2009-09-29 1 views
2

У меня есть библиотека .so, скомпилированная для Linux в формате ELF, которая используется программой Java. Я пытаюсь перенести это приложение в Mac OS X и обнаружил, что OS X использует другое расширение для этих файлов, .jnilib. Я уже понял, как настроить PATH так, чтобы он правильно находил файлы. Однако OS X Java не может загружать файлы .so (потому что он ожидает другое расширение).Преобразование файла .so в файл .jnilib

Если я изменяю расширение файла с .so на .jnilib, JVM может находить файлы, но не может их прочитать (поскольку они были скомпилированы неправильно).

Есть ли способ, либо в системе Linux или Mac OS X, без исходного кода, чтобы преобразовать эти файлы в .so.jnilib? Я подозреваю, что это невозможно, но Stack Overflow еще не подвела меня - и я не буду считать «это невозможно» как сбой.

ответ

3

Вы пытаетесь использовать родную библиотеку для Linux на Mac OS X? Нет. Это не сработает.

Вам понадобится версия Mac родной библиотеки и переименуйте ее в jnilib, если она уже не имеет этого суффикса.

Это основное отличие между байт-кодом JVM и собственным кодом. Родной код очень специфичен для платформы. У нас даже есть несколько версий JNI-библиотек для разных стилей linux.

Поскольку Mac и Linux используют один и тот же процессор, и все они основаны на Unix, я бы не сказал, что это невозможно, даже если это довольно близко.

+0

Вот чего я боялся. В ответ на ваш первый вопрос, да, это то, что я хотел бы сделать, и, к сожалению, я не могу получить версию Mac для родной библиотеки - компания, которая делает ее, не имеет доступной версии Mac. –