C++跨平臺(tái)應(yīng)用編譯方法詳解
C++計(jì)算機(jī)編程語(yǔ)言應(yīng)用領(lǐng)域非常廣泛,可以輕松的幫助我們完成各種功能需求。比如今天為大家介紹的C++跨平臺(tái)應(yīng)用的實(shí)現(xiàn),就可以以一種簡(jiǎn)單的方法來(lái)進(jìn)行具體的操作。希望能給大家?guī)?lái)一些幫助。
要建立一個(gè)C++跨平臺(tái)應(yīng)用,亦難也易。
難在什么?所謂應(yīng)用,自是實(shí)際應(yīng)用,牽涉面很廣。
眾所周知,不同的操作系統(tǒng)即時(shí)是相同的函數(shù)也可能有著差異。如參數(shù),返回值定義不同(socket),甚至語(yǔ)義不一樣(sleep)等等。如果全部需要自己來(lái)維護(hù)這個(gè)差異,必須手寫無(wú)數(shù)如下形式的代碼:
- #if defined WINNT
- #elif defined LINUX
- ...
這絕對(duì)是一個(gè)浩大的工程。至于工程有多大,可以看一看 ACE 的開(kāi)發(fā)成本。這是難!#t#
為了能實(shí)現(xiàn)C++跨平臺(tái)應(yīng)用,我要做的是尋找經(jīng)過(guò)大家實(shí)踐的證明能用的跨平臺(tái)庫(kù)來(lái)幫助編碼,建立在巨人的肩膀上,這個(gè)工作就變得容易了。下面逐一列出我的一些選擇:
0. 語(yǔ)言及基礎(chǔ)庫(kù):
標(biāo)準(zhǔn) C++ 與 boost
標(biāo)準(zhǔn) c++ 是98年制定的,現(xiàn)在主流的 c++ 編譯器都能夠比較好的支持了。這里建議使用VC7.1和GCC4.0及以上版本。 boost 則是 C++ 標(biāo)準(zhǔn)委員會(huì)的一群人弄起來(lái)的一個(gè) C++ 庫(kù)集合,其中不少庫(kù)以經(jīng)進(jìn)入 C++ TR1,可以說(shuō)是準(zhǔn)標(biāo)準(zhǔn)。使用這里的庫(kù)我們有著充分的理由。象字符串的操作可以用 boost 的 String algorithms 庫(kù),格式化操作可以用 boost::format,正則式可用 boost::regex 等等。boost 內(nèi)容相當(dāng)?shù)呢S富,具體內(nèi)容還請(qǐng)直接查閱 http://www.boost.org/libs/libraries.htm 這里有一個(gè) boost 庫(kù)的列表。
1. 操作系統(tǒng)相關(guān)的:
ACE(ADAPTIVE Communication Environment) 和 boost
ACE 將操作系統(tǒng)的相關(guān)的互斥量、信號(hào)、進(jìn)程,線程等都很好的封裝起來(lái),可以直接使用。不過(guò)如果沒(méi)有用到 ACE,當(dāng)然不是每個(gè)程序都跟網(wǎng)絡(luò)有關(guān),沒(méi)用到網(wǎng)絡(luò)時(shí),可能也不會(huì)用ACE。這時(shí)可以考慮使用boost 中相應(yīng)的類 thread::thread, Boost.::Process 等。
2. 網(wǎng)絡(luò)
ACE
ACE 用來(lái)做網(wǎng)絡(luò)應(yīng)用是很不錯(cuò)的,除了對(duì)異構(gòu)平臺(tái)的簡(jiǎn)單的包裝外還有應(yīng)付各種環(huán)境的設(shè)計(jì)模式。甚至可以說(shuō)是C++跨平臺(tái)網(wǎng)絡(luò)編程目前唯一之選。對(duì)于性能要求比較高的想使用IOCP(winnt)或EPOLL(linux2.6)的,ACE 也提供了包裝,可以方便使用。
3. 數(shù)據(jù)庫(kù)
OTL (Oracle, Odbc and DB2-CLI Template Library)
要支持?jǐn)?shù)據(jù)庫(kù),不但要C++跨平臺(tái)應(yīng)用,還要跨數(shù)據(jù)庫(kù),是不是比你想象的還要理想。OTL支持以下面的數(shù)據(jù)庫(kù) : OTL Oracle ,SQL Server, Access, MySQL。還有其它的庫(kù)如DTL,但我看中了這個(gè)庫(kù)不但支持ODBC,它還支持?jǐn)?shù)據(jù)庫(kù)的原生接口,可以有更佳的性能。
4. 界面
QT, wxWidgets
雖然使用了多年的 MFC,我還是對(duì) MFC 無(wú)數(shù)的宏深惡痛絕, wxWidgets 雖不錯(cuò)但 MFC 風(fēng)格很明顯。還是用 QT 吧,面向?qū)ο蟮木幊踢€是比較讓人愉快的。不過(guò),QT 是雙認(rèn)證的,當(dāng)你的程序免費(fèi)時(shí)它就免費(fèi),你的程序打算賣錢時(shí),它也要,而且要價(jià)很高。所以,如果有版權(quán),成本上的考慮的話,則可以考慮wxWidgets。
列出了不少東西,希望給大家一些幫助。不過(guò)最后要注意一點(diǎn),每個(gè)庫(kù)支持的C++跨平臺(tái)應(yīng)用數(shù)量有多有少,并不一致,做應(yīng)用時(shí)要估量一下可能用到的平臺(tái)。不過(guò),一般來(lái)說(shuō)是足夠了,上面的庫(kù)至少支持 windows 和 unix/linux 兩種以上。到這里,基本上可以把自己寫的程序在 windows、linux 搬來(lái)去了,呵呵 "一次編碼,到處編譯!" 。