c++跨平台

來源:互聯網
上載者:User
口號:一次編碼,到處編譯! :-) 

     一次編碼,在 vc7.1 , vi 甚至ulteredit 上完成編碼。
     到處編譯,將寫好的代碼 copy  到其它作業系統,也能夠編譯運行,而不用去修改哪怕一行代碼。
     聽起來是不是象 SUN 的口氣,呵呵。 其實 c++ 的移植性個人認為是超過 java 的,java之所以名聲在外的原因 B.S 說得很明了:廠商利益。
 
     呵,廢話不多說,進入主題。
 
     要建立一個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 內容相當的豐富,具體內容還請直接查閱 http://www.boost.org/libs/libraries.htm 這裡有一個 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 搬來去了,呵呵 "一次編碼,到處編譯!" 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.