
我正在開發一個具有一定依賴性的應用程序,為此我使用外部工具。一個例子是我使用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 下執行。