我正在开发一个具有某些依赖关系的应用程序,为此我使用了外部工具。一个例子是我使用 putty 的命令行工具 plink.exe 从 java 程序 telnet/ssh 远程机器。
现在,当我切换到 ubuntu 时,有一个实用程序 sshpass 可以帮我完成同样的任务。现在的问题是 sshpass 尚未安装,在安装之前,我的程序无法运行。
在 Windows 中,如果缺少某些东西,我可以在我的程序中打包可移植可执行文件(例如这个 plink.exe),并在运行时使用它来完成工作。现在在 ubuntu 中,我想知道是否有任何方法可以打包 .exe 之类的文件,我可以简单地使用参数调用它来执行类似的任务??
基本上我想知道在 ubuntu 中是否有办法无需安装即可运行文件?如果是这样,那怎么可能呢?
答案1
在 Linux 中,就像在 Windows 中一样,你可以编译任何程序并将其所有依赖项链接为静态文件。但不同之处在于,在 Linux 中,这不是通常的做法。
Linux 方式是每个程序只安装一次,如果您需要使用 shhpass,则不应将其与您的软件捆绑在一起,但您应该将其列为安装包中的依赖项(即 Ubuntu 的 deb 文件)。包管理器将在安装程序时获取并安装。
这种行为有几个原因,从效率(使用共享内存)到安全性(您可以将安全错误与捆绑程序一起发送)。与所有方法一样,这种方法也有其缺点,主要是需要一个集中的位置来安装软件,但答案的重点是事情如何,而不是事情可能如何。
简短的回答是肯定的,你可以做到,但这会很困难。您将与类 Unix 操作系统的文化和设计作斗争。您可能需要编译要捆绑的每个程序的自己的版本,而大多数打包者和用户都不会喜欢它。
答案2
答案3
在 Linux 下,任何文件都可以执行(只要您有权限)。从您的 Java 程序中,您可以调用与其一起打包的任何 .exe 文件。
不过,您可能需要确保 .exe 文件可以在 Linux 下执行。部分(如果不是大多数).exe 特定于一种操作系统。例如,putty 的网站仅提供需要编译成可执行文件的 unix 源代码(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)。对于 Windows,可执行文件已经编译,但可能无法在 Linux/unix 下运行。