C 實現跨平台

2021-06-19 14:08:55 字數 2152 閱讀 6630

要建立乙個c++跨平台的應用,亦難也易。

難在什麼?所謂應用,自是實際應用,牽涉面很廣。 一般來說,至少有如下幾個方面需要我們考慮:

0. 語言及基礎庫 

1. 作業系統相關的

2. 網路

3. 資料庫

4. 介面

其它自然還有很多,如xml,加解密等等,這裡先討論前面列出的幾項。 

眾所周知,不同的作業系統即時是相同的函式也可能有著差異。如引數,返回值定義不同(socket),甚至語義不一樣(sleep)等等。如果全部需要自己來維護這個差異,必須手寫無數如下形式的**:

#if defined winnt

#elif defined linux

...這絕對是乙個浩大的工程。至於工程有多大,可以看一看 ace 的開發成本。這是難!

為了能實現我的口號,我要做的是尋找經過大家實踐的證明能用的跨平台庫來幫助編碼,建立在巨人的肩膀上,這個工作就變得容易了。下面逐一列出我的一些選擇:

0. 語言及基礎庫:

標準 c++ 與 boost

標準 c++ 是98年制定的,現在主流的 c++ 編譯器都能夠比較好的支援了。這裡建議使用vc7.1和gcc4.0及以上版本。  boost 則是 c++ 標準委員會的一群人弄起來的乙個 c++ 庫集合,其中不少庫以經進入 c++ tr1,可以說是準標準。使用這裡的庫我們有著充分的理由。象字串的操作可以用 boost 的 string algorithms 庫,格式化操作可以用 boost::format,正則式可用 boost::regex 等等。boost 內容相當的豐富,具體內容還請直接查閱

這裡有乙個 boost 庫的列表。

1. 作業系統相關的:

ace(adaptive communication environment) 和 boost

ace 將作業系統的相關的互斥量、訊號、程序,執行緒等都很好的封裝起來,可以直接使用。不過如果沒有用到  ace,當然不是每個程式都跟網路有關,沒用到網路時,可能也不會用ace。這時可以考慮使用boost  中相應的類 thread::thread, boost.::process 等。

2. 網路

ace

ace 用來做網路應用是很不錯的,除了對異構平台的簡單的包裝外還有應付各種環境的設計模式。甚至可以說是c++跨平台網路程式設計目前唯一之選。對於效能要求比較高的想使用iocp(winnt)或epoll(linux2.6)的,ace 也提供了包裝,可以方便使用。  

3. 資料庫

otl (oracle, odbc and db2-cli template library)

要支援資料庫,不但要跨平台,還要跨資料庫,是不是比你想象的還要理想。otl支援以下面的資料庫 : otl oracle ,sql server, access, mysql。還有其它的庫如dtl,但我看中了這個庫不但支援odbc,它還支援資料庫的原生介面,可以有更佳的效能。

4. 介面

qt, wxwidgets

雖然使用了多年的 mfc,我還是對 mfc 無數的巨集深惡痛絕, wxwidgets 雖不錯但 mfc 風格很明顯。還是用 qt 吧,物件導向的程式設計還是比較讓人愉快的。不過,qt 是雙認證的,當你的程式免費時它就免費,你的程式打算賣錢時,它也要,而且要價很高。所以,如果有版權,成本上的考慮的話,則可以考慮wxwidgets。

列出了不少東西,希望給大家一些幫助。不過最後要注意一點,每個庫支援的平台數量有多有少,並不一致,做應用時要估量一下可能用到的平台。不過,一般來說是足夠了,上面的庫至少支援 windows 和 unix/linux 兩種以上。到這裡,基本上可以把自己寫的程式在 windows、linux 搬來去了,呵呵 "

一次編碼,到處編譯!"。相關

ace:            

boost:       

otl:            

qt:              

C 跨平台事件機制實現

今天看到有人在討論c 標準沒有提供類似作業系統層次的事件通知機制,如windows的事件核心物件。其實我想說的事,c 11標準裡的互斥量及條件變數已經夠幫我們實現類似的功能了。剛編寫了乙個事件通知類新鮮出爐,供大家把玩一下,一起學習併發執行緒的編寫。寫的有不好的地方,請一定要不吝惜指出來,我會改正,...

C 跨平台嗎?

理論上c 和.net 程式是跨平台的,c 作為一種程式語言,早在2003年就成為iso的標準之一。但是有很多實際問題。1.微軟官方並沒有提供除windows 包括windows mobile 以外的其他系統,如linux,蘋果,unix,等等的framework。而不像sun公司開發windows,...

react Native如何實現跨平台

react native如何實現跨平台 react native是通過虛擬dom實現跨平台,執行時 將虛擬dom轉換為相應的web編碼 android編號 ios編碼進行執行的。實現 01.html 01.js react 元件化 元件的重用 自定義元件 class childtext extend...