【发布时间】:2018-09-22 12:35:14
【问题描述】:
我正在开发一个运行 shell 脚本的 Java 桌面应用程序。该脚本应该运行使用 C 生成的可执行文件。我的 C 代码生成的可执行文件依赖于共享库。
我不想在应用程序中包含 C 代码。因此,当我希望分发它时,我将无法在客户端的 PC 上生成新的可执行文件。正如我所读到的,目标代码和可执行文件取决于机器,因此我将无法在具有不同硬件配置的客户端机器上运行这个可执行文件(通过在我的机器上编译和链接生成)。
现在我只在 JAR 中包含了可执行文件,并且能够在 Java 中运行 shell 脚本(在 Java 中使用 Runtime.getRuntime().exec(shell_script))。正如我之前所说,这个可执行文件依赖于共享库,当软件(执行脚本)在不同的 PC 上运行时,它会报告一个错误,说缺少一个共享库。
我想要一个关于如何运行在不同机器上编译和链接的可执行文件的建议,该可执行文件依赖于桌面应用程序中的共享库(需要分发)。
如果我在任何地方出错或您认为我误解了任何概念,请发表评论。 提前致谢。
【问题讨论】:
-
不存在“C 可执行文件”之类的东西。
-
Runtime.getRuntime.exec ("foo")调用 foo 并且与程序的来源无关。它只查找它的名称,如果我没记错的话,它必须在路径中或使用有效路径指定。您可以从配置文件中读取名称/路径,也可以将其作为启动参数给出,或者... - 因此它可能是 Windows 上的 explorer.exe、OpenBSD 上的 safari 或 linux 上的 firefox,用户可以替换这些带有 shell 脚本,您的 Java 程序不会注意到这些。但当然它必须在目标上可用并接受你提供给它的参数,并做它应该做的。
标签: java c shell shared-libraries executable