4

我有一个使用第 3 方 jar (utils.jar) 的应用程序,它调用第 3 方 DLL (utils.dll)。jar 文件管理对 DLL 的调用,包括 DLL 的名称。DLL 有 32 位版本和 64 位版本。

目前,该应用程序只能在 32 位机器上运行。当我尝试在 64 位机器上运行它时,它告诉我

Can't load IA 32-bit .dll on a AMD 64-bit platform

当我用 64 位替换 32 位 dll 时,它工作正常。如果可以避免的话,我不想维护两个单独的版本(一个使用 32 位库,另一个使用 64 位库)。有没有办法构建应用程序,以便它可以确定它需要使用哪个版本的库?

我们的项目是使用 Ant 构建的,但如有必要,我可以探索其他替代方案。

4

3 回答 3

2

您必须创建一个附加的 ant 目标,以便它始终构建您的应用程序的 x32 和 x64 变体。

我不想维护两个单独的版本

如果蚂蚁你的脚本总是同时产生两种交付,那么它不需要太多额外的努力。

于 2013-07-26T18:07:31.553 回答
1

当您执行 loadLibary 时,您可以使用System.getProperty("os.arch"). 因此,您捆绑了所有 dll,并且将在运行时选择相关版本。

于 2013-07-26T19:03:21.963 回答
1

对于部署 Java 桌面应用程序,最好的选择通常是安装该应用程序。使用Java Web Start 1。JWS 适用于 Windows、OS X 和 *nix。

  1. JWS 提供了许多吸引人的功能,包括但不限于启动屏幕、桌面集成、文件关联、自动更新(包括延迟下载和更新的编程控制)、按平台、架构或 Java 版本、配置划分本地和其他资源下载运行时环境(最低 J2SE 版本、运行时选项、RAM 等),使用扩展轻松管理公共资源。

于 2013-07-27T15:26:56.567 回答