- RTC程序設計:實時音視頻權威指南
- 戴維
- 2109字
- 2024-05-14 10:03:23
1.1.4 跨平臺開發(fā)
主流開發(fā)平臺
在上一節(jié),我們介紹了目前的主流操作系統由3大桌面系統(Windows、macOS、Linux),以及兩大移動終端系統(iOS和Android)組成。RTC的設計目標應該要能兼容這5大系統的不同之處。
對程序員而言,不同的操作系統對應著不同的首選IDE、編譯器和SDK(Software Development Kit,軟件開發(fā)包),如表1-1所示。
表1-1 不同操作系統的首選IDE、編譯器和SDK

我們希望使用一份C++代碼,就能適應不同環(huán)境下的基本編譯環(huán)境。
跨平臺編譯
如何自動識別當前代碼是在哪個平臺編譯的呢?
我們知道,每個平臺的編譯器都有一些獨一無二的預定義宏(Predefined Marcos)。借助這些預定義宏,并假設我們在各個平臺都使用官方推薦的開發(fā)環(huán)境,就可以識別當前的平臺。
例如,微軟的MSVC編譯器會定義_MSC_VER宏;Android的Clang編譯器會定義__ANDROID__宏。
所以,我們自動區(qū)分5個平臺的示例代碼如下:


我們可以在各個平臺的差異文件中,配置各個編譯器的特有屬性及平臺特有屬性。
例如,在Windows平臺上:

在iOS平臺上:

基本類型
由于歷史原因,在各種編譯器下,C語言的基本類型的長度會有少量不一致。尤其注意wchar_t和long類型在不同系統中的長度。
我們使用DTypes.h來定義自己的基本類型,屏蔽類型長度的不一致。

借助DConfig.h和DType.h,我們可以屏蔽C++代碼在平臺與編譯器上的差別。
Hello World
作為本書的第一個代碼示例,我們將實現一個跨平臺的Hello程序,它會在不同的平臺上顯示不同的Hello提示。
我們設計一個跨平臺隔離的C++類DXP[7],并為其封裝兩個static方法。

主程序如下:

上述代碼在Windows上會輸出Hello Windows\r\n。而在macOS上則會輸出Hello macOS\n。
在下一節(jié),我們將在此基礎上實現一個跨平臺的緩存管理類。
總結
在本節(jié),我們簡要地回顧了從古至今人類傳遞信息的各種方式。借助電與電磁波,人們有了高速傳遞信息的載體。借助計算機與互聯網,人們有了操作信息的設備與傳播信息的渠道。操作系統與智能手機的普及,讓每個人都能隨時隨地參與信息的生產與消費。為了能屏蔽各個編程平臺的差異,我們使用了預定義宏,并定義了一個通用類型系統。
活在信息時代的我們,一出生就被各種信息圍繞。人的一生會接觸各種各樣的信息,我們需要了解信息、辨別信息、善用信息。這些是我們做決策賴以依據的根基。
在計算機中,信息都是用二進制數的0和1存儲的。我們將在下一節(jié)具體介紹。
要點回顧
·計算機誕生前的通信技術。
·計算機的誕生與互聯網的興起。
·各種操作系統的特點。
·使用預定義宏識別編譯平臺。
·使用類型定義統一基本類型。
·實現跨平臺的print函數。
參考閱讀
1.《計算機發(fā)展簡史》(1985年),陳厚云等編著。該書有非常多的史料細節(jié)。
2.Media Technology and Society(1998年),Brian Winston著。該書記錄了從電報到互聯網的各種歷史發(fā)展與參考。其中提到,1665年,英國的羅伯特·胡克(Robert Hooke,1635—1703)提出了借助一根特制的電線瞬間傳遞一個聲音的想法,這應該是最早的關于電話的設想。
3.《邏輯的引擎》(2005年),馬丁·戴維斯著,張卜天譯。該書描述多個數學家為計算機誕生所做的貢獻。
4.《穿越計算機的迷霧》(2011年),李忠。該書用通俗易懂的語言講述了計算機誕生前夜的故事。2018年出版了第二版。
5.F.P.Brooks另一本著作《設計原本》(The Design of Design),也是軟件工程領域的經典。
6.《觀止·Windows NT》講述了Windows NT系統誕生的過程。
7.《離心力:互聯網歷史與數字化未來》(A History of the Internet and the Digital Future)(2018年),Johnny Ryan著,段鐵錚譯。該書提供了互聯網誕生的許多背景材料。
8.有關CPU的指令介紹,可以在線下載Intel的編程手冊[8]。
9.Windows平臺上的開發(fā)資料
(1)《Windows核心編程》,Jeffery Richter著,是學習kernel32.dll主要函數的首選圖書。
(2)《Windows程序設計》,Charles Petzold著,是學習user32.dll主要函數的首選圖書。
(3)《Windows圖形編程》,Feng Yuan著,是學習gdi32.dll主要函數的首選圖書。
10.Linux下的開發(fā)資料
(1)《鳥哥的Linux私房菜》基礎學習篇,是學習Linux命令行不錯的入門材料。
(2)The UNIX Programming Environment(1983年),Brian W.Kernighan,Rob Pike著。
(3)Advanced Programming in the UNIX Environment3rd(2013年),W.Richard Stevens,Stephen A.Rago著。
11.iOS的開發(fā)資料
(1)iOS Programming:The Big Nerd Ranch Guide(2020年),Christian Keur,Aaron Hillegass著。
(2)Programming iOS 14(2021年),Matt Neuburg著。
12.macOS的開發(fā)資料
(1)OS X and iOS Kernel Programming(2011年),Ole Henry Halvorsen,Douglas Clarke著。
(2)*OS Internals,Volume I(2017年);Volume II(2019年),Jonathan Levin著。
13.Android的開發(fā)資料
(1)Android Programming:The Big Nerd Ranch Guide(2019年),Bill Phillips,Chris Stewart,Kristin Marsicano著。
練習題
1.[5分鐘](通信概念)什么是通信?人們?yōu)槭裁匆ㄐ牛抗湃藶榱送ㄐ哦际褂昧四男┓椒ǎ?/p>
2.[10分鐘](信鴿速率)古代人通過信鴿傳遞消息,調查一下其傳輸速率。
3.[10分鐘](首份電報內容)上網查閱一下第一份電報的內容是什么。
4.[2小時](計算機發(fā)明史)計算機是如何發(fā)明的?有哪些關鍵事件?
5.[2小時](Wi-Fi發(fā)明人)Wi-Fi中的跳頻技術是誰發(fā)明的?有何用途?
6.[10分鐘](桌面系統版本)查看自己的Windows/macOS桌面系統使用的是什么版本?
7.[10分鐘](手機系統版本)查看自己的手機使用的是什么系統?什么版本?
8.[30分鐘](RFC查詢與閱讀)使用Web瀏覽器查閱第一份RFC的協議內容,并學習如何檢索其他RFC文檔。
9.[3人天](Linux命令)學習使用Linux命令,并編寫一個Shell腳本,用于打印系統的版本號、CPU、內存、硬盤等信息。
10.[5人天](iOS編程)編寫一個iOS App,盡可能多地顯示當前系統的信息與用戶設置。
11.[5人天](Android編程)編寫一個Android App,盡可能多地顯示當前系統的信息與用戶設置。
12.[2人天](類型單元測試)為DTypes.h文件編寫一個UT(Unit Test)文件,測試各個平臺下基本類型的長度是否符合預期。
- Scala Design Patterns
- Mastering C# Concurrency
- Python神經網絡項目實戰(zhàn)
- R的極客理想:工具篇
- Highcharts Cookbook
- Learning SciPy for Numerical and Scientific Computing(Second Edition)
- PySide 6/PyQt 6快速開發(fā)與實戰(zhàn)
- 利用Python進行數據分析
- INSTANT Adobe Edge Inspect Starter
- 時空數據建模及其應用
- 案例式C語言程序設計實驗指導
- 愛上C語言:C KISS
- Android移動應用項目化教程
- LabVIEW數據采集
- Java程序設計實用教程(第2版)