我正在使用 Muon UI(使用 Ultralight 而不是 Chromium)在 Golang 上創建一個桌面應用程式,并為 Linux 和 Windows 交叉構建我的應用程式。目前該應用程式運行良好,但它需要 Ultralight 庫(*.dll for Windows 和 *.so for Linux)。但我想將我的應用程式分發為單個可執行檔案。如何創建兩個可執行檔案?Linux 的第一個檔案,它應該包括 Linux 的主要可執行檔案和 *.so 庫。第二個檔案應包含 Windows 的主要可執行檔案和僅 *.dll 庫。我怎么能做到這一點?
是否有任何 CLI 實用程式?(例如在 Docker 內部的 gitlab CI 中使用)或者我可以通過 Golang 來做到這一點(例如使用嵌入包。我可以將庫嵌入到 exe 檔案中,它可以運行)?
或者我可以使用 cgo 將動態庫作為靜態鏈接到二進制檔案嗎?
uj5u.com熱心網友回復:
誠實的回答應該是:“困難重重,充滿了痛苦、鮮血和淚水。”
稍微長一點的答案是,預編譯的 DLL/.so 可能包含的不僅僅是一個靜態庫。是否可以將 DLL/.so“轉換”為靜態庫?有些。它歸結為將其內容轉儲到目標檔案中,恢復所有重定位條目,可能處理版本化符號和弱符號。不,那里沒有廚房水槽實用程式,可以在可執行的二進制級別上為您完成所有作業。
如果您可以將自己限制在 Linux 上,您可能需要查看Flatpak。這樣做是將所有內容打包成一種“自解壓存檔”,在啟動時會透明地、無形地將自身解壓到一個就地臨時掛載點(您不會從系統的其余部分看到)。
現在,一種選擇是自己構建程式的所有依賴項,并安排將這些構建創建為靜態庫。在這種情況下,您不再需要處理 DLL。然而,有些庫不想為靜態鏈接而構建,因此您的里程可能會有所不同。
實話實說:為什么分發多個檔案有任何問題?在 Linux/*BSD 上,.desktop無論如何您必須發送單獨的圖示和檔案,以便這些內容顯示在桌面應用程式選單中。是的,如果不是處理 XDG 桌面條目檔案,我們可以選擇將所有這些資訊放入一個特殊的 - 我們稱之為.xdgdata- 只讀部分,帶有一些眾所周知的符號名稱,這樣我們就可以真正擁有單個檔案可分發的可執行檔案。
我誠實的建議:不要為此而出汗。只需發送整個檔案,不要太擔心“這看起來如何”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/362238.html
上一篇:發送HTTP/2請求
下一篇:OpenSSL解密
