Могу ли я запустить 32-битное Java-приложение на 64-битной платформе?

3

У меня есть старое приложение Java, которое было скомпилировано для 32-битной платформы. Я перешел с Windows XP (32-разрядная версия) на OS X Snow Leopard (64-разрядная версия), и я хотел бы продолжить использовать это приложение, однако получаю исключение по следующим направлениям:

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
/Applications/TheApp/lib/libswt-pi-carbon-3139.jnilib:  no suitable image found.
Did find:
/Applications/TheApp/lib/libswt-pi-carbon-3139.jnilib: mach-o, but wrong 
architecture

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

Можно ли вообще запустить это 32-битное приложение на 64-битной платформе без перекомпиляции? или использовать виртуальную машину?

Редактировать:

У меня нет исходного кода для этого приложения, и я не слишком знаком с разработкой на Java. Если есть инструмент, который я могу использовать для «компиляции» (?) До 64 бит, это было бы полезно!

Phillip B Oldham
источник
2
Возможно, вы захотите установить и 32-разрядную платформу (я полагаю, вы можете установить обе системы одновременно, или она может также включать 32-разрядную JVM).
Breakthrough
если причина, по которой вы говорите, что не хотите перекомпилировать ее, заключается в том, что у вас нет кода, вы можете декомпилировать его, а затем перекомпилировать.
barlop
@Breakthrough: я считаю, что Snow Leopard имеет как 32, так и 64 билда на нем. мой Java Preferences в любом случае диалог показывает это, и java -version возвращается "Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)"
Phillip B Oldham
1
Похоже, оригинальная программа была скомпилирована с использованием библиотеки JNI ( Википедия JNI ). С чистой Java у вас не должно быть проблем.
Manwe

Ответы:

3

Java разработана, чтобы делать такие вещи прозрачно. Когда-нибудь слышал лозунг Скомпилировать один раз, запустить везде ? Ну, это уместно здесь: Компилировать один раз, везде отлаживать ,

Проблема, с которой вы сталкиваетесь, заключается в том, что графический интерфейс зависит от конкретного окна. исключение вы видите подтверждает это. В общем, все, что использует SWT или AWT, не будет работать правильно на другой платформе, если не будут приняты меры, чтобы убедиться в этом.

Короче говоря, вам не повезло. Вы могли бы, конечно, использовать JD извлечь исходный код и изменить код графического интерфейса для правильной работы в OSX. К сожалению, это потребует некоторого опыта работы с Java.

Ярослав Рахматуллин
источник