-
1 # leang789
-
2 # 痴者工良
要實現一個安裝包,在Windows和Linux下都能執行,要分執行環境和軟體包本身。
除了系統區別外,也要根據CPU而分,Winodws和Linux常用CPU架構有X86/X64,ARM32/64。
上面有人說了,C/C++,其實,C/C++是跨平臺語言,C/C++軟體不是”跨平臺”的。
C/C++是屬於偏底層的語言,因此有很多庫是依賴於系統API,在Windows下能用,在Linux下不一定能用。另外,在X86下編譯的程式,是無法在ARM下執行。反之亦然。
所以,C/C++是應該做不到一個安裝包,多平臺執行的了。
java,c#是託管語言,C/C++是非託管語言,託管語言,編譯的程式,不會直接編成機器碼,而是編譯成JIT(即時語言)。系統是無法直接執行這個編譯後的軟體包,需要執行環境。
這個軟體包是跨平臺、跨CPU的,與系統無關,與CPU無關。而要執行編譯後的軟體包,需要安裝執行環境,如JDK,.NET Core runtime等。為什麼託管語言可以做到跨平臺呢~
先制定統一個API,然後根據不同系統不同CPU架構,編寫多個平臺的”執行環境程式”,這些環境對開發者來說,遮蔽了不同系統、CPU的底層差異,向上提供一個統一的介面。即SDK。
對開發者來說,無須深入瞭解底層原理,也無須理會不同系統、CPU的差異和特性,因為SDK已經把底層處理實現好,所有平臺下的介面都是統一的。
就好像,一個小學,有一到六年級,學校要向學生宣傳防火知識,然而不同年級的小學生知識水平是不同的,要分年級來教育。這時候年級主任就相當於SDK,學校把防火宣傳任務給年級主任,年級主任再把同一件事,根據這級小學生的知識水平,把防火知識幼兒化,變成動畫片或者其他形式表達,讓學生理解。
現在在坐車回深圳。。。手打的字,上面可能說不清楚,我以優秀的跨平臺框架.NET Core做示例。
.NET Core是一個跨平臺框架,支援Windows/Linux,也支援X86,ARM架構的晶片,能開發雲計算業務,能開發物聯網軟體,能開發手機軟體。。。.NET Core主要使用C#開發,開發出的軟體,能夠在各種平臺下執行。
首先,目標主機或者Docker,安裝好.NET Core Runtime/SDK,把你寫好的程式丟進去就可以運行了。你可以在Windows下寫,也可以在Linux下寫程式。
騷年,來吧,入手.NET Core。
回覆列表
首先,C和C++本身就是跨平臺的,所以,不基於特殊動態連結庫的程式本身就可以跨平臺運行於各個系統。
但是,對於一個現代大型程式來說,完全不呼叫外部庫是不現實的,這就相當於你造汽車,不但重新設計輪子,還重新設計螺絲釘。這是個巨大的成本開銷,不是吃飽了沒事幹的人就絕對不會這麼幹。
但是,全世界幾十億人,還是有這麼一群吃飽了沒事幹的人。最關鍵的是,他們不但重新設計了螺絲釘,還把設計檔案公開給大家用了。這就是wxWidgets專案。
wxWidgets專案的牛6之處就在於。只要基於其標準介面設計的程式,不但能正常運行於Windows下,還能運行於Linux和mac OS下。只要你得程式不去動作業系統核心(比如改個Windows登錄檔啥的)基本都能完美執行。
另外wxWidgets基於C++程式碼GCC編譯。也就是說不但你寫出的程式能在不同系統執行。就連寫程式的過程都能在不同系統下完成。
最後wxWidgets有提供安裝打包工具,可直接生成能在不同系統下執行的安裝檔案,也就是你說的同一個檔案能在不同系統下安裝。