Ubuntu 等效的可移植可執行文件

Ubuntu 等效的可移植可執行文件

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

Ubuntu 上慣用的方法是給出一個 .deb 包,而不是你的原始程序,其中包含你的程式並列出了它的依賴項。然後,安裝套件將自動安裝任何缺少的依賴項(假設它們可以從標準來源獲得)。

有一些文檔這裡關於創建包。

另一種更適合 Windows(甚至有點 OSX-y)的方法是將所有依賴項的靜態連結版本與應用程式捆綁在一起,並將它們解壓縮到運行它們的臨時目錄中。您可以使用類似的工具做自己要做到這一點:將您需要的所有可執行文件,加上您的 jar 和合適的啟動腳本放在一個目錄中,它會完成剩下的工作。

答案3

在linux下,任何檔案都可以被執行(只要你有權限)。從您的 java 程式中,您可以呼叫與其打包的任何 .exe 檔案。

不過,您可能需要確保 .exe 檔案在 Linux 下可執行。一些(如果不是大部分).exe 特定於一種作業系統。例如,putty的網站只提供unix的原始碼,需要編譯成執行檔(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)。對於 Windows,可執行檔已編譯,但可能無法在 linux/unix 下執行。

相關內容