我可以在64位平台上运行32位Java应用程序吗?


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 从命令行运行应用程序时切换但没有运气。

是否可以在64位平台上运行这个32位应用程序,而无需重新编译 或使用VM?

编辑:

我没有这个应用程序的原始资源,我对Java开发并不熟悉。如果有一个工具,我可以使用“上编译”(?)到64位,这将是有用的!


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

Answers:


3

Java旨在透明地执行此类操作。曾经听过这个口号 编译一次,到处运行 ?嗯,这里有关系: 编译一次,到处调试

您看到的问题是因为GUI是特定于Windows的。该 你看到的例外 证实了这一点。通常,任何使用SWT或AWT的东西都不能在不同的平台上正常工作,除非注意确保它能够正常工作。

长话短说,你运气不好。你当然可以使用 JD 提取源代码并修改GUI代码以在OSX上正常运行。不幸的是,这需要一些Java经验。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.