同時兼容Windows和Linux應用軟體是否可能?


如果是機器代碼,根本不可能,PE 和 ELF(和 Mach-O)都規定了第一位元組且彼此不同,不可能實現 polyglot。

如果不是機器代碼,就很隨意了,只要只用公共特性就可。

比如 nodejs 很多代碼都是全平台的。


@孔祥舟說的幾乎都覆蓋了,我試著補充點對於利弊的個人看法:

1. 用 Qt 一類的框架構建,對兩個平台分別編譯。

編譯時的兼容,有時即使有跨平台的庫,也難以做到完全解決所有的需求。如果需要實現一些特殊的平台相關特性,難免要自己寫,要求對於目標平台都有所了解。而且對編碼習慣有更高的要求,同樣的代碼換個編譯器沒準warning能變error。

2. 用 MinGW 來把 Windows 裝成 *nix。

這個其實和1是有聯繫的,而且Cygwin幹得比MinGW(其實應該是指MSYS吧?它應該不屬於MingW的一部分)更漂亮,用了不少「骯髒」的小手段來實現POSIX兼容(連fork, exec什麼的都搞出來了)。不過重新編譯是不可避免的,適用於編譯一些給linux寫的應用。

3. 用 wine 來在 Linux 下面跑為 Windows 編譯好的 binary

似乎是最便捷的方式了,不過感覺對新API兼容也不怎麼樣,有時沒準就撞上stub了。(為毛跑QQ還是會卡死)

4. 用 Java 一類的語言寫,編譯成兩個平台都能跑的 byte code。

不錯的解決方案,適用於中大型項目。但是絕對不是一勞永逸的跨平台,細節還是需要加以注意並給出特定平台的實現。比如:文件路徑。

5. 直接用兩個平台都能寫的腳本語言來寫,比如 Python。

也是不錯的,適用於中小型的項目。現代的腳本語言效率都不錯,一般的需求不至於有什麼性能瓶頸(雖然我覺得Raspberry Pi跑Node.js果然還是有點吃不消。。),不過如果真的碰到了的話,估計要考慮重構或者乾脆換個語言重寫了。。


「同時兼容」這個概念太廣了吧……

1、用 Qt 一類的框架構建,對兩個平台分別編譯。

2、用 MinGW 來把 Windows 裝成 *nix。

3、用 wine 來在 Linux 下面跑為 Windows 編譯好的 binary(別笑! TeamViewer 官方的 Linux 版就是這麼實現的!)

4、用 Java 一類的語言寫,編譯成兩個平台都能跑的 byte code。

5、直接用兩個平台都能寫的腳本語言來寫,比如 Python。

更新:忽然見到之前有過一個問題 開發跨平台的桌面應用用什麼編程語言比較好?


python ?


java笑了


如果你希望寫一個系統,同時兼任Windows的exe和Linux的軟體包,那我告訴你:幾乎不可能,系統內核都不一樣,想啥呢?但是如果你希望寫一個能在Windows下和Linux下都能流暢允許的軟體,完全沒問題,有以下途徑:

1.不進行編譯,就使用腳本文件(比如.py文件結尾的腳本,我學安全的,用的很多工具都是以這樣的形勢開源並發布的,大多數環境都兼容,就是需要自己安裝依賴項有點麻煩)

2.Java,為了兼容而生,你懂的。

當然Linux也不是完全沒辦法允許.exe文件,deepin-wine了解一下?(穩定性嘛……額)


用HTML5直接把軟體放到網站上,然後用瀏覽器直接操作,如office在線版。或者把數據放到雲伺服器,然後出相對應的客服端,如QQ


推薦閱讀:

僅16 M 20+實用工具!每款必備!電腦又可以少安好多軟體
六脈科技:淺析商城APP開發需求
千圖百庫網的 vip 文件免費下載 | 附網頁轉應用
介紹一款高效全能精簡的本地視頻播放軟體

TAG:軟體 | MicrosoftWindows | 操作系統 | Linux |