在各種跨平台開發中,原始碼級跨平台開發其實是最適中的。這種方式兼顧了靈活性和跨平台。顯然,效率也會是最好的。但是,除錯起來會比較的不容易。尤其重要的是開發難度比較高。所以,很多人寧願選擇效率有損失的二進位制級別跨平台。但是,很多時候程式的執行效率還是放在第一位的。此時,我們就不得不採用原始碼級跨平台開發。比如遊戲引擎、強資料運算的演算法、傳輸演算法等等。
原始碼級跨平台開發的難點在什麼地方呢?最主要的還是執行時庫的問題。 假如你的軟體僅僅使用標準c。那這個程式的可移植性也就沒有任何問題,它甚至可以在嵌入式裝置上執行。然而,標準c涵蓋的技術太少了,它沒有包含gui、也包含執行緒,連對檔案和目錄的讀寫都不怎麼完整。所以,很多時候,標準c並不能滿足我們的需求。我們需要更加強大的支援。於是,只好尋找更好的跨平台的執行時庫。
這個跨平台的執行時庫會為你的程式在每個他所支援的平台上都提供相同的程式設計介面。你的程式就是呼叫這些介面來實現跨平台。事實上,你的程式僅有乙份源**,卻存在不同的二進位制版本。無論在哪個平台上,你都不會直接呼叫該系統所提供的api,而是通過執行時庫來呼叫。
但是,想完全做到這一點並不是特別容易。各種作業系統之間存在著太多的差異。尤其是gui、執行緒、檔案及目錄部分。當然,還有動態鏈結庫、網路資訊、計算機資訊等等細節問題也有很大差異。更加令人沮喪的是,這種情況並沒有隨著計算機的發展而變的好轉起來。很多系統廠商,為了各自的商業目的,有意無意的加重個系統之間的差異性。使得跨平台開發越來越麻煩。例如在windows下非常常見的com技術,走到linux下便無計可施。
事實上,現在已經有很多顯存在跨平台執行時庫了。最常用的估計就是wxwidgets了。當然,幾乎所有的跨平台執行時庫都是以gui為目標的。很少聽到沒有gui的跨平台執行時庫。下面,我們就來看看視訊記憶體的那些跨平台執行時庫。
1、wxwidgets
wxwidgets專案是乙個跨平台的gui庫。該專案歷史悠久,開始與2023年。早期叫做wxwindows,但是由於微軟對windows有專利,後來才改名為wxwidgets。
1.1 wxwidgets 的優點
1)、通過封裝平台原生介面來實現gui。
正是由於這個原因,使用wxwidgets實現的應用程式,在不同的平台上執行時會和系統原生的應用程式在外觀上非常相似。
2)、在實現上跟mfc相識。也是採用訊息對映的方式進行。
對於熟悉mfc的程式設計師來說,學習wxwidgets要輕鬆很多。
1.1 wxwidgets 的缺點
正所謂「成也蕭何,敗也蕭何」。wxwidgets 的優點也給wxwidfets 帶來了最大的缺點——無法實現換膚。在追求個性化的時代,沒有換膚功能的程式真的很難生存。wxwidgets 程式的介面風格跟系統綁的死死的。
另外,在控制項庫方面上也有其缺點之一。不太容易實現複雜的控制項一直是個比較頭疼的問題。
2、qt
qt原來是乙個商業公司開發的。不過後來修改的授權,變的對開源相對「和諧」起來。qt是linux下著名桌面環境kde的基礎。而qt也可以在windows下執行。所以,qt本身是乙個平台無關的gui庫。
qt和wxwidgets不同,它不是呼叫平台提供的介面庫,而是自己繪製。所以,qt可以實現換膚。但是,qt的授權始終都是個問題。另外,qt的很多高階庫並免費的。
3、gtk
據說gtk當初是為了寫gimp而實現的gui庫。它是用c語言寫成的。不過,也採用了物件導向的思想。並且它是linux下另外一款著名桌面環境gnome的基礎。gtk 也是跨平台的,使用gtk的程式同樣可以執行到windows上。gimp就有windows的版本。
不過,由於gtk是使用c語言實現的,所以,其物件導向的實現有些臃腫。另外,gtk 的介面是多執行緒不安全的。所以使用gtk寫多執行緒的程式時一定要多加留意。另外,gtk 也可以很方便的實現換膚。因為他的介面也是自己繪製出來的。
4、fltk
fltk 是一款非常輕量級的gui庫。筆者就曾經使用fltk設計過一款軟體。但是,fltk的控制項也是自繪的。所以,實現換膚還是比較容易的。另外,fltk中內建了4套**可以使用。
但是,fltk對中文的支援還不是特別好。很遺憾的是它對輸入法的支援相當不好。至少我還沒有在fltk的程式中輸入過漢字。
5、fox
和fltk類似也是一款輕量級的gui庫。我是在寫本文時才知道的這個gui庫。對其了解不多。據說:「作者從自己親身的開發經驗中得出了乙個理想的gui庫應該是什麼樣子的感受出發,從而開始了對這個庫的開發。」
簡單看了一下原始碼,並試用了一下,發現其確實蠻輕量級的。編譯出來僅僅乙個2mb左右的so。不過跟fltk一樣,不能使用輸入法。估計中文支援也是有問題的。
6、juce
據說很強大。該庫對音訊的支援青睞有加。我也是在寫本文時才剛剛留意有這個乙個庫存在的。沒有用過。據說很多音訊廠商使用了該類庫。該類庫也是跨平台的,包含了一系列控制項。介面做的很是漂亮,很有mac的風格。不過預設字型好小,看的眼睛很受不了。
我簡單試用了一下。它對圖形和音訊的處理確實很有獨到之處。對opengl的支援也很好。不過,很可惜,同樣不支援中文。
跨平台非阻塞SOCKET實現原始碼分析
1.實現linux與windows的共同函式 a.linux平台標頭檔案引用 include include include include include include include include include includeb.windows平台標頭檔案引用 include includ...
struts2原始碼執行流程
先進入核心過濾器,然後判斷該請求是不是由struts2執行的,是的話 1 建立actioncontext 其中其實先建立乙個valuestack,然後從其中拿出context用來建立actioncontext 2 把request包裝成乙個新的request 包裝了getattribute方法,包裝...
跨平台app開發(引擎)工具的選擇
1.html5執行速度慢,使用者體驗不好 2.原生應用開發,即ios和安卓分別開發,需要兩種技術人員,後期 維護困難,很難達到統一。3.xamarin是一款c 的解決方案,收費。xamarin.form是使用者做跨平台的介面。加了群聽說很坑,還不成熟,放棄了繼續研究。4.混合式開發,也就是用html...