1. 程式人生 > >C++跨平臺開源庫 之一

C++跨平臺開源庫 之一

在如下的庫支援下,開發的系統可以很方便移植到當前大部分平臺上執行

而無需改動,只需在對應的平臺下 用你喜歡的編譯器 重新編譯即可

經典的C++庫

STLport——-SGI STL庫的跨平臺可移植版本,在以前有些編譯器離符合

標準比較遠的情況下 那時還是有用的,當然目前vc71已經比較接近標準了,

故目前不怎麼用它了。

Boost———準標準庫, 功能強大 涉及能想的到的大部分非特別領域的演算法

有一個大的C++社群支援

WxWindows—–功能強大的跨平臺GUI庫 ,它的功能和結構都類似 MFC,故原則上

可以通過WxWindows把現有MFC程式移植到非Win平臺下

Blitz———高效率的數值計算函式庫 ,你可以訂製補充你需要的演算法

Log4cpp——-日誌處理 ,功能類似Java中的log4j

ACE———–自適應通訊環境, 重量級的通訊環境庫。

Crypto++ —–加/解密演算法庫, 非常專業的C++ 密碼學函式庫

CppUnit — 一個c++的單元測試框架 類似 java 的JUnit

Loki ——- 一個實驗性質的庫,嘗試把類似設計模式這樣思想層面的東西通過

庫來提供,他是C++的一個模板庫,系C++”貴族”, 它把C++模板的功能發揮到了極致

學術性的C++庫:

FC++ ——–The Functional C++ Library ,用庫來擴充語言的一個代表作 ,模板庫

CGAL ——- Computational Geometry Algorithms Library計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的使用者。

其它目前我感覺還不是很爽的C++庫:

Doxygen —-註釋文件生成工具 ,可恨的是 我找不到 windows版本

QT ———-大名頂頂的一個多平臺的C++圖形使用者介面應用程式框架(GUI庫)

可氣的是他的 Windows版 是商業釋出的要付費

xml4c——–IBM開發的XML Parser,系超重量級的, 適用大型應用中, 其DLL有 12M,恐怖吧

Xerces c++ –Apache的XML專案, 但 只支援少數的字元編碼,如ASCII,UTF-8,UTF-16等,

不能處理包含中文字元的XML文件

XMLBooster —– 也是一種 XML的 解析工具

Fox ——-又一種開放原始碼(C++)的GUI庫,功能不是很強C++開發環境(Win平臺下除了 Visual C++ 和 Borland C++以外的):

Cygwin ——–Windows下的一個Unix模擬環境

MinGW ——–GCC的一個Windows移植版本

Dev C++ ——– 一個C/C++ 的整合開發環境,在Windows上的C++編譯器一直和標準有著一段距離的時候,GCC就是一個讓Windows下開發者流口水的編譯器。

Eclipse-CDT —-IMB 開發的一個整合開發環境,一般用來作為Java 開發環境,但由於

Eclipse 是通過外掛體系來擴充套件功能,這裡我們 安裝 CDT外掛後,就可以用來作為

C++ 的整合開發環境

—————————————————————————————–

經典的C++庫

—————————————————————————————–

以下以 vc71環境 為例,其他環境 見各軟體包的說明文件。

1. STLport (SGI STL庫的跨平臺可移植版本。)

——-http://www.stlport.org

vc71環境中編譯安裝

版本:STLport-4.6.2.tar.gz

copy vc71.mak makefile

nmake clean all

標頭檔案在 %STLport_root%/include\stlport

庫檔案在 %STLport_root%/lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

2 WxWindows (跨平臺的GUI庫)

——–http://www.wxwindows.org

——–http://sourceforge.NET/projects/wxwindows

——–http://i18n.Linux.net.cn/others/wxWindowstut/wxTutorial.htm

因為其類層次極像MFC,所以有文章介紹從MFC到WxWindows的程式碼移植以實現跨平臺的功能。

通過多年的開發也是一個日趨完善的GUI庫,支援同樣不弱於前面兩個庫。並且是完全開放原始碼的。新近的C++ Builder X的GUI設計器就是基於這個庫的。

vc71環境中編譯安裝

版本:wxMSW-2.6.0-Setup.exe

copy makefile.vc makefile

通過 配置 config.vc 的 SHARED = 0 和 BUILD = debug

確定 nmake clean all 的四種編譯結果:

include標頭檔案: include\wx

Lib庫檔案: lib\vc_dll 和 lib\vc_lib

DLL: lib\vc_dll

標頭檔案在 %wxWidgets_root%/include\wx

庫檔案在 %wxWidgets_root%/lib\vc_dll 和 %wxWidgets_root%/lib\vc_lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

3 boost (“準”標準庫)

——http://www.boost.org/

——http://sourceforge.Net/projects/boost/

Boost庫是一個經過千錘百煉、可移植、提供原始碼的C++庫,作為標準庫的後備,是C++標準化程序的發動機之一。 Boost庫由C++標準委員會庫工作組成員發起,在C++社群中影響甚大,其成員已近2000人。 Boost庫為我們帶來了最新、最酷、最實用的技術,是不折不扣的“準”標準庫。

vc71環境中編譯安裝

版本:boost_1_32_0.exe

首先進入 tools\build\jam_src 執行 build.bat 得到一個工具: bjam.exe

將其複製到 boost_root 目錄下

執行 bjam “-sTOOLS=vc-7_1” stage 開始編譯 (bjam “-sTOOLS=vc-7_1” install)

標頭檔案在 %boost_root%/boost

庫檔案在 %boost_root%/stage\lib

標頭檔案新增方法如:

#i nclude 有時要連結lib庫

Boost中比較有名氣的有這麼幾個庫:

Regex

正則表示式庫

Spirit

LL parser framework,用C++程式碼直接表達EBNF

Graph

圖元件和演算法

Lambda

在呼叫的地方定義短小匿名的函式物件,很實用的functional功能

concept check

檢查泛型程式設計中的concept

Mpl

用模板實現的超程式設計框架

Thread

可移植的C++多執行緒庫

把C++類和函式對映到python之中

Pool

記憶體池管理

smart_ptr

5個智慧指標,學習智慧指標必讀,一份不錯的參考是來自CUJ的文章:

Smart Pointers in Boost,哦,這篇文章可以查到,CUJ是提供線上瀏覽的。

Boost總體來說是實用價值很高,質量很高的庫。並且由於其對跨平臺的強調,對標準C++的強調, 是編寫平臺無關,現代C++的開發者必備的工具。但是Boost中也有很多是實驗性質的東西, 在實際的開發中實用需要謹慎。並且很多Boost中的庫功能堪稱對語言功能的擴充套件,其構造用盡精巧的手法, 不要貿然的花費時間研讀。Boost另外一面,比如Graph這樣的庫則是具有工業強度,結構良好, 非常值得研讀的精品程式碼,並且也可以放心的在產品程式碼中多多利用。

3 blitz (高效率的數值計算函式庫)

——http://folk.uio.no/patricg/blitz/html/index.html

——http://www.oonumerics.org/blitz/

——http://sourceforge.net/projects/blitz/

Blitz++ 是一個高效率的數值計算函式庫,它的設計目的是希望建立一套既具像C++ 一樣方便,同時又比Fortran速度更快的數值計算環境。通常,用C++所寫出的數值程 序,比 Fortran慢20%左右,因此Blitz++正是要改掉這個缺點。方法是利用C++的template技術, 程式執行甚至可以比Fortran更快。Blitz++目前仍在發展中,對於常見的SVD,FFTs,QMRES等常見的線性代數方法並不提供, 不過使用者可以很容易地利用Blitz++所提供的函式來構建。

vc71環境中編譯安裝

版本:blitz-0.8.tar.gz

將 blitz-0.8/Blitz-VS.NET.zip 解壓到當前目錄下

開啟 Blitz-Library.sln 編譯即可

標頭檔案在 %blitz_root%/blitz

%blitz_root%/random

庫檔案在 %blitz_root%/lib (靜態庫)

標頭檔案新增方法如:

#i nclude 有時要連結lib庫

#i nclude 不需要lib庫

4 log4cpp (日誌處理)

——-http://sourceforge.net/projects/log4cpp/

——-http://log4cpp.hora-obscura.de/index.PHP/Main_Page

Log4cpp 是 Log4J 的 C++ 移植版本,開放原始碼並且完全免費。與 Log4J 能夠跨平臺一樣,Log4cpp 也致力於寫出跨平臺的 C++ 程式。Log4cpp 主要是用於 C++ 程式中寫 log 檔案,與此同時,Log4cpp 中有很多有用的類庫,對於寫跨平臺 C++ 程式的人來說, 可以直接拿來用,或者作為自己寫跨平臺類的參考。
Log4cpp 中的跨平臺類庫有明顯的 Java 痕跡,比如 Class、Object 、Loader、Locale 等類。 Log4cpp中的類都可以根據類名 new 出一個 instance,其實現的方式和 MFC 如出一轍:通過 C++ 強大的巨集來實現。

Log4cpp 中的跨平臺類庫主要有:

訊號類:Condition(broadcast,signal,wait),CriticalSection (lock,unlock),WaitAccess,Event(set,reset,wait),Mutex(lock,unlock), Semaphore(wait,tryWait,post)

網路類:InetAddress,Socket,ServerSocket,DatagramSocket,SocketInputStream,SocketOutputStream

日期類:DateFormat,DateTimeDateFormat,System(currentTimeMillis)

檔案類:FileWatchdog(doOnChange)

記憶體操作類:基於引用計數機制的智慧指標 ObjectPtrT

字串操作類:StrictMath,StringHelper(toUpperCase,toLowerCase,trim,equalsIgnoreCase,endsWith,format),StringTokenizer

執行緒類:Thread(start,run,join)

使用以上的類不用考慮 thread handle, event handle, socket handle 之類的 handle 問題,所有這些檔案已經被封裝了。很好用,對不對?

不足之處在於沒有 GUI 類。ANSI C++ 中對於目錄等檔案系統的處理功能較弱,這裡面也沒有目錄處理類。

另外 Socket 的 read(void * buf, size_t len) 不能設定 timeout,並且如果讀取資料個數小於 len 那麼 read 函式將一直堵塞,不太好用,很可惜。實際的使用上面,可以考慮做一個 Socket 子類,重寫 read() 函式。

vc71環境中編譯安裝

版本:log4cpp-0.3.5rc1.tar.gz

開啟 msvc6 編譯即可

標頭檔案在 %log4cpp_root%/include\log4cpp

庫檔案在 %log4cpp_root%/lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

5 Crypto++ 加/解密演算法庫

—http://sourceforge.net/projects/cryptopp/

—http://www.eskimo.com/~weidai/cryptlib.html

—http://www.cryptopp.com

提供處理密碼,訊息驗證,單向hash,公匙加密系統等功能的免費庫。Crypto++ 是一個非常專業的C++ 密碼學函式庫,幾乎在密碼學裡頭常見的演演算法都可以在Crypto++ 找到實作的函式,如:block 與stream ciphers,hash functions,MACs,random number generators,public key 加密…等方法

vc71環境中編譯安裝

版本:cryptopp521.zip

直接通過 cryptest.dsw 相關的庫

標頭檔案在 %cryptopp_root%

庫檔案在 %cryptopp_root%/lib

標頭檔案新增方法如:

#i nclude <*.h> 需要連結lib庫

6 ACE

——http://www.cs.wustl.edu/~schmidt/ACE.html

C+ +庫的代表,超重量級的網路通訊開發框架。ACE自適配通訊環境(Adaptive Communication Environment)是可以自由使用、開放原始碼的面向物件框架,在其中實現了許多用 於併發通訊軟體的核心模式。ACE提供了一組豐富的可複用C++ 包裝外觀(Wrapper Facade)和框架元件,可跨越多種平臺完成通用的通訊軟體任務, 其中包括:事件多路分離和事件處理器分派、訊號處理、服務初始化、程序間通訊、共享記憶體管理、訊息路由、 分散式服務動態(重)配置、併發執行和同步,等等。

7. CppUnit

——-http://sourceforge.net/projects/cppuint/

一個c++的單元測試框架,可以通過派生測試類的方式,定製具體的測試方案。xUnit家族的一員,從JUnit移植而來,JUnit是Java語言的單元測試框架。

vc71環境中編譯安裝

版本:cppunit-1.10.2.tar.gz

直接通過 CppUnitLibraries.dsw 編譯相關的庫

標頭檔案在 %cppunit_root%/cppunit

庫檔案在 %cppunit_root%/lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

8 Loki

—–http://moderncppdesign.com

—–http://sourceforge.net/projects/loki-lib/

—–http://sourceforge.net/projects/loki-exp/

其實可和Boost一起介紹它,一個實驗性質的庫。作者在loki中把C++模板的功能發揮到了極致。 並且嘗試把類似設計模式這樣思想層面的東西通過庫來提供。同時還提供了智慧指標這樣比較實用的功能。

該庫系模板庫,庫本身無需編譯,在你的工程檔案中 引用標頭檔案就可以使用,如果 你直接或間接使用了small object,那你需要在你的工程檔案 加上 SmallObj.cpp如果 你直接或間接使用了Singletons,那你需要在你的工程檔案 加上 Singleton.cpp

—————————————————————————————–

學術性的C++庫:

—————————————————————————————–

1 FC++: The Functional C++ Library

——–http://www.cc.gatech.edu/~yannis/fc++/

這個庫提供了一些函式式語言中才有的要素。屬於用庫來擴充語言的一個代表作。如果想要在OOP之外尋找另一分的樂趣,可以去看看函式式程式設計的世界。大師Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就將函式式語言列為至少應當學習的6類程式語言之一。

當前版本:FC++.1.5.zip

模板庫,在實際工程中 ,加上要用的標頭檔案 就可以編譯。

2 CGAL

—–http://www.cgal.org

Computational Geometry Algorithms Library的目的是把在計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的使用者。

當前版本:CGAL-3.1.zip

這是一個已編譯的版本,當然也包括完整的原始碼

標頭檔案在 %CGAL_root%/include/CGAL

庫檔案在 %CGAL_root%/lib/msvc7

標頭檔案新增方法如:

#i nclude 需要連結lib庫

—————————————————————————————–

其它目前我感覺還不是很爽的C++庫:

—————————————————————————————–

1 Doxygen

——http://sourceforge.net/projects/doxygen/

——http://www.stack.nl/~dimitri/doxygen/

註釋文件生成工具,較之Doc++功能更為齊全,可以生成包括HTML、PDF、RTF在內的多種格式的文件,並有GUI介面, 除了支援c/c++語言外,還支援IDL、java、php、c#等

2、 QT(windows版要付錢)

——-http://www.trolltech.com/

——-http://www.qiliang.net/qt.html

Qt是Trolltech公司的一個多平臺的C++圖形使用者介面應用程式框架。它提供給應用程式開發者建立藝術級的圖形 使用者介面所需的所用功能。Qt是完全面向物件的很容易擴充套件,並且允許真正地元件程式設計。自從1996年早些時候, Qt進入商業領域,它已經成為全世界範圍內數千種成功的應用程式的基礎。Qt也是流行的linux桌面環境KDE 的基礎,同時它還支援Windows、Macintosh、Unix/X11等多種平臺。

3、Fox

———http://www.fox-toolkit.org/

開放原始碼的GUI庫。作者從自己親身的開發經驗中得出了一個理想的GUI庫應該是什麼樣子的感受出發, 從而開始了對這個庫的開發。有興趣的可以嘗試一下。

4 xml4c

——http://www.alphaworks.ibm.com/tech/xml4c

IBM的XML Parser,用c++語言寫就,功能超級強大。號稱支援多達100種字元編碼,能夠支援中文, 適合於大規模的xml應用。若只是很小範圍的應用,則非最佳選擇,畢竟,你需要“揹負”約12M左右的dll的沉重負擔

5 Xerces c++

——-http://xml.apache.org/xerces-c

Apache的XML專案,同樣是c++ 實現,來源於IBM的xml4c,因此程式設計介面也是和xml4c一致的。 但是目前只支援少數的字元編碼,如ASCII,UTF-8,UTF-16等,不能處理包含中文字元的XML文件。Xerces-C++ 是一個非常健壯的XML解析器,它提供了驗證,以及SAX和DOM API。XML驗證在文件型別定義(Document Type Definition,DTD)方面有很好的支援,並且在2001年12月增加了支援W3C XML Schema 的基本完整的開放標準。

6 XMLBooster

——-http://www.xmlbooster.com/

這個庫通過產生特製的parser的辦法極大的提高了XML解析的速度,並且能夠產生相應的GUI程式來修改這個parser。在DOM和SAX兩大主流XML解析辦法之外提供了另外一個可行的解決方案。

—————————————————————————————–

C++開發環境(Win平臺下除了 Visual C++ 和 Borland C++以外的):

—————————————————————————————-

1. Cygwin (Windows下的一個Unix模擬環境)

這個Cygwin的一部分是GCC的另外一個Windows移植版本,Cygwin是Windows下的一個Unix模擬環境。 嚴格的說是模擬GNU的環境,這也就是”Gnu’s Not Unix”要表達的意思。

至Cygwin的網站http://www.cygwin.com/下載安裝程式setup.exe,可直接點選執行或先行下載至個人電腦後再執行。 目前我已經下載到本地了,直接安裝即可。

2. MinGW (GCC的一個Windows移植版本)

1)http://sourceforge.net/projects/mingw 直接訪問的,點選 Files,然後下載以下檔案:MinGW-3.1.0-1.exe, mingw32-make-3.80.0-3.exe。
安裝MinGW 到 C:/MinGW 目錄下,然後安裝 mingw32-make 到 C:/MinGW 下,通過瀏覽器到 C:/MinGW/bin 下,將 mingw32-make.exe 改名或者另外複製為 make.exe。

(以上的設定已經足夠。不過為了求新,我是同時下載了 gcc-core-3.4.2-20040916-1. tar.gz,mingw-runtime-3.5.tar.gz 和 w32api-3.1.tar.gz,將它們直接解壓到 C:/MinGW 下更新舊的檔案。 不過這對這篇文章本身沒有任何影響。新舊兩種配置我都測試過。)

安裝次序:

MinGW-3.1.0-1.exe

mingw32-make-3.80.0-3.exe

gcc-core-3.4.2-20040916-1.tar.gz

mingw-runtime-3.5.tar.gz

w32api-3.1.tar.gz

gdb-5.2.1-1.exe

mingw-utils-0.3.tar.gz

binutils-2.15.91-20040904-1.tar.gz

3)準備MinGW 使用者開發的命令列環境(一個批處理)

如: mingw.bat

@rem ————————————–

@SET MINGW_ROOT=D:\Mingw

@rem

@echo Setting environment for using Mingw.

@rem

@set PATH=%MINGW_ROOT%\BIN;%PATH%

@set

INCLUDE=%MINGW_ROOT%\INCLUDE;%MINGW_ROOT%\INCLUDE\c++\3.2.3;%MINGW_ROOT%\include\c++\3.2.3\mingw32;%MINGW_ROOT%\include\c++\3.2.3\backward;%INCLUDE%

@set LIB=MINGW_ROOT\LIB;%LIB%

@rem —————————————-

3. Dev C++ (一個C/C++ 的整合開發環境)

GCC是一個很好的編譯器。在Windows上的C++編譯器一直和標準有著一段距離的時候,GCC就是一個讓Windows下開發者流 口水的編譯器。Dev-C++就是能夠讓GCC跑在Windows下的工具,作為整合開發環境,還提供了同專業IDE相媲美的語法高亮,程式碼提示,除錯等功能。由於使用Delphi開發,佔用記憶體少,速度很快,比較適合輕量級的學習和使用。

可以使用 MinGW-GCC 作為它的編譯器

4 Eclipse-CDT

遊戲開發

Audio/Video 3D C++ Programming Library

——http://www.galacticasoftware.com/products/av/

——http://sourceforge.net/projects/av3d/

***3D是一個跨平臺,高效能的C++庫。主要的特性是提供3D圖形,聲效支援(SB,以及S3M),控制介面(鍵盤,滑鼠和遙感),XMS。

KlayGE

——http://home.g365.net/enginedev/

——http://sourceforge.net/projects/klayge/

國內遊戲開發高手自己用C++開發的一個開放原始碼、跨平臺的遊戲引擎。K layGE是一個開放原始碼、跨平臺的遊戲引擎,並使用Python作指令碼語言。KlayGE在LGPL協議下發行。感謝龔敏敏先生為中國遊戲開發事業所做出的貢獻。

OGRE

——http://www.ogre3d.org

——http://www.ogre3d.org/docs/manual/

——http://sourceforge.net/projects/ogre

OGRE(面向物件的圖形渲染引擎)是用C++開發的,使用靈活的面向物件3D引擎。 它的目的是讓開發者能更方便和直接地開發基於3D硬體裝置的應用程式或遊戲。引擎中的類庫對更底層的系統庫(如:Direct3D和OpenGL) 的全部使用細節進行了抽象,並提供了基於現實世界物件的介面和其它類。

在如下的庫支援下,開發的系統可以很方便移植到當前大部分平臺上執行

而無需改動,只需在對應的平臺下 用你喜歡的編譯器 重新編譯即可

經典的C++庫

STLport——-SGI STL庫的跨平臺可移植版本,在以前有些編譯器離符合

標準比較遠的情況下 那時還是有用的,當然目前vc71已經比較接近標準了,

故目前不怎麼用它了。

Boost———準標準庫, 功能強大 涉及能想的到的大部分非特別領域的演算法,

有一個大的C++社群支援

WxWindows—–功能強大的跨平臺GUI庫 ,它的功能和結構都類似 MFC,故原則上

可以通過WxWindows把現有MFC程式移植到非Win平臺下

Blitz———高效率的數值計算函式庫 ,你可以訂製補充你需要的演算法

Log4cpp——-日誌處理 ,功能類似java中的log4j

ACE———–自適應通訊環境, 重量級的通訊環境庫。

Crypto++ —–加/解密演算法庫, 非常專業的C++ 密碼學函式庫

CppUnit — 一個c++的單元測試框架 類似 java 的JUnit

Loki ——- 一個實驗性質的庫,嘗試把類似設計模式這樣思想層面的東西通過

庫來提供,他是C++的一個模板庫,系C++”貴族”, 它把C++模板的功能發揮到了極致

學術性的C++庫:

FC++ ——–The Functional C++ Library ,用庫來擴充語言的一個代表作 ,模板庫

CGAL ——- Computational Geometry Algorithms Library計算幾何方面的大部分重要的

解決方案和方法以C++庫的形式提供給工業和學術界的使用者。

其它目前我感覺還不是很爽的C++庫:

Doxygen —-註釋文件生成工具 ,可恨的是 我找不到 windows版本

QT ———-大名頂頂的一個多平臺的C++圖形使用者介面應用程式框架(GUI庫)

可氣的是他的 Windows版 是商業釋出的要付費

xml4c——–IBM開發的XML Parser,系超重量級的, 適用大型應用中, 其DLL有 12M,恐怖吧

Xerces c++ –Apache的XML專案, 但 只支援少數的字元編碼,如ASCII,UTF-8,UTF-16等,

不能處理包含中文字元的XML文件

XMLBooster —– 也是一種 XML的 解析工具

Fox ——-又一種開放原始碼(C++)的GUI庫,功能不是很強

C++開發環境(Win平臺下除了 Visual C++ 和 Borland C++以外的):

Cygwin ——–Windows下的一個Unix模擬環境

MinGW ——–GCC的一個Windows移植版本

Dev C++ ——– 一個C/C++ 的整合開發環境,在Windows上的C++編譯器一直和標準有著一

段距離的時候,GCC就是一個讓Windows下開發者流口水的編譯器。

Eclipse-CDT —-IMB 開發的一個整合開發環境,一般用來作為Java 開發環境,但由於

Eclipse 是通過外掛體系來擴充套件功能,這裡我們 安裝 CDT外掛後,就可以用來作為

C++ 的整合開發環境

—————————————————————————————–

經典的C++庫

—————————————————————————————–

以下以 vc71環境 為例,其他環境 見各軟體包的說明文件。

1. STLport (SGI STL庫的跨平臺可移植版本。)

——-http://www.stlport.org

vc71環境中編譯安裝

版本:STLport-4.6.2.tar.gz

copy vc71.mak makefile

nmake clean all

標頭檔案在 %STLport_root%/include\stlport

庫檔案在 %STLport_root%/lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

2 WxWindows (跨平臺的GUI庫)

——–http://www.wxwindows.org

——–http://sourceforge.net/projects/wxwindows

——–http://i18n.linux.net.cn/others/wxWindowstut/wxTutorial.htm

因為其類層次極像MFC,所以有文章介紹從MFC到WxWindows的程式碼移植以實現跨平臺的功能。

通過多年的開發也是一個日趨完善的GUI庫,支援同樣不弱於前面兩個庫。並且是完全開放原始碼的。新近
的C++ Builder X的GUI設計器就是基於這個庫的。

vc71環境中編譯安裝

版本:wxMSW-2.6.0-Setup.exe

copy makefile.vc makefile

通過 配置 config.vc 的 SHARED = 0 和 BUILD = debug

確定 nmake clean all 的四種編譯結果:

include標頭檔案: include\wx

Lib庫檔案: lib\vc_dll 和 lib\vc_lib

DLL: lib\vc_dll

標頭檔案在 %wxWidgets_root%/include\wx

庫檔案在 %wxWidgets_root%/lib\vc_dll 和 %wxWidgets_root%/lib\vc_lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

3 boost (“準”標準庫)

——http://www.boost.org/

——http://sourceforge.net/projects/boost/

Boost庫是一個經過千錘百煉、可移植、提供原始碼的C++庫,作為標準庫的後備,是C++標準化程序的發動機之一。 Boost庫由C++標準委員會庫工作組成員發起,在C++社群中影響甚大,其成員已近2000人。 Boost庫為我們帶來了最新、最酷、最實用的技術,是不折不扣的“準”標準庫。

vc71環境中編譯安裝

版本:boost_1_32_0.exe

首先進入 tools\build\jam_src 執行 build.bat 得到一個工具: bjam.exe

將其複製到 boost_root 目錄下

執行 bjam “-sTOOLS=vc-7_1” stage 開始編譯 (bjam “-sTOOLS=vc-7_1” install)

標頭檔案在 %boost_root%/boost

庫檔案在 %boost_root%/stage\lib

標頭檔案新增方法如:

#i nclude 有時要連結lib庫

Boost中比較有名氣的有這麼幾個庫:

Regex

正則表示式庫

Spirit

LL parser framework,用C++程式碼直接表達EBNF

Graph

圖元件和演算法

Lambda

在呼叫的地方定義短小匿名的函式物件,很實用的functional功能

concept check

檢查泛型程式設計中的concept

Mpl

用模板實現的超程式設計框架

Thread

可移植的C++多執行緒庫

Python

把C++類和函式對映到Python之中

Pool

記憶體池管理

smart_ptr

5個智慧指標,學習智慧指標必讀,一份不錯的參考是來自CUJ的文章:

Smart Pointers in Boost,哦,這篇文章可以查到,CUJ是提供線上瀏覽的。

Boost總體來說是實用價值很高,質量很高的庫。並且由於其對跨平臺的強調,對標準C++的強調,是編寫平臺無關, 現代C++的開發者必備的工具。但是Boost中也有很多是實驗性質的東西,在實際的開發中實用需要謹慎。 並且很多Boost中的庫功能堪稱對語言功能的擴充套件,其構造用盡精巧的手法,不要貿然的花費時間研讀。 Boost另外一面,比如Graph這樣的庫則是具有工業強度,結構良好,非常值得研讀的精品程式碼, 並且也可以放心的在產品程式碼中多多利用。

3 blitz (高效率的數值計算函式庫)

——http://folk.uio.no/patricg/blitz/html/index.html

——http://www.oonumerics.org/blitz/

——http://sourceforge.net/projects/blitz/

Blitz++ 是一個高效率的數值計算函式庫,它的設計目的是希望建立一套既具像C++ 一樣方便,同時又比Fortran速度更快的數值計算環境。通常,用C++所寫出的數值程式, 比 Fortran慢20%左右,因此Blitz++正是要改掉這個缺點。方法是利用C++的template技術,程式執行甚至可以比Fortran更快 。Blitz++目前仍在發展中,對於常見的SVD,FFTs,QMRES等常見的線性代數方法並不提供, 不過使用者可以很容易地利用Blitz++所提供的函式來構建。

vc71環境中編譯安裝

版本:blitz-0.8.tar.gz

將 blitz-0.8/Blitz-VS.NET.zip 解壓到當前目錄下

開啟 Blitz-Library.sln 編譯即可

標頭檔案在 %blitz_root%/blitz

%blitz_root%/random

庫檔案在 %blitz_root%/lib (靜態庫)

標頭檔案新增方法如:

#i nclude 有時要連結lib庫

#i nclude 不需要lib庫

4 log4cpp (日誌處理)

——-http://sourceforge.net/projects/log4cpp/

——-http://log4cpp.hora-obscura.de/index.php/Main_Page

Log4cpp 是 Log4J 的 C++ 移植版本,開放原始碼並且完全免費。與 Log4J 能夠跨平臺一樣,Log4cpp 也致力於寫出跨平臺的 C++ 程式。Log4cpp 主要是用於 C++ 程式中寫 log 檔案,與此同時,Log4cpp 中有很多有用的類庫,對於寫跨平臺 C++ 程式的人來說, 可以直接拿來用,或者作為自己寫跨平臺類的參考。Log4cpp 中的跨平臺類庫有明顯的 Java 痕跡, 比如 Class、Object 、Loader、Locale 等類。 Log4cpp中的類都可以根據類名 new 出一個 instance, 其實現的方式和 MFC 如出一轍:通過C++ 強大的巨集來實現。

Log4cpp 中的跨平臺類庫主要有:

訊號類:Condition(broadcast,signal,wait),CriticalSection (lock,unlock),WaitAccess,Event(set,reset,wait),Mutex(lock,unlock), Semaphore(wait,tryWait,post)

網路類:InetAddress,Socket,ServerSocket,DatagramSocket,SocketInputStream,SocketOutputStream

日期類:DateFormat,DateTimeDateFormat,System(currentTimeMillis)

檔案類:FileWatchdog(doOnChange)

記憶體操作類:基於引用計數機制的智慧指標 ObjectPtrT

字串操作類:StrictMath,StringHelper(toUpperCase,toLowerCase,trim,equalsIgnoreCase,endsWith,format),StringTokenizer

執行緒類:Thread(start,run,join)

使用以上的類不用考慮 thread handle, event handle, socket handle 之類的 handle 問題,所有這些文
件已經被封裝了。很好用,對不對?

不足之處在於沒有 GUI 類。ANSI C++ 中對於目錄等檔案系統的處理功能較弱,這裡面也沒有目錄處理類。

另外 Socket 的 read(void * buf, size_t len) 不能設定 timeout,並且如果讀取資料個數小於 len 那麼 read 函式將一直堵塞,不太好用,很可惜。 實際的使用上面,可以考慮做一個 Socket 子類,重寫 read() 函式。

vc71環境中編譯安裝

版本:log4cpp-0.3.5rc1.tar.gz

開啟 msvc6 編譯即可

標頭檔案在 %log4cpp_root%/include\log4cpp

庫檔案在 %log4cpp_root%/lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

5 Crypto++ 加/解密演算法庫

—http://sourceforge.net/projects/cryptopp/

—http://www.eskimo.com/~weidai/cryptlib.html

—http://www.cryptopp.com

提供處理密碼,訊息驗證,單向hash,公匙加密系統等功能的免費庫。Crypto++ 是一個非常專業的C++ 密碼學函式庫,幾乎在密碼學裡頭常見的演演算法都可以在Crypto++ 找到實作的函式,如:block 與stream ciphers,hash functions,MACs,random number generators,public key 加密…等方法

vc71環境中編譯安裝

版本:cryptopp521.zip

直接通過 cryptest.dsw 相關的庫

標頭檔案在 %cryptopp_root%

庫檔案在 %cryptopp_root%/lib

標頭檔案新增方法如:

#i nclude <*.h> 需要連結lib庫

6 ACE

——http://www.cs.wustl.edu/~schmidt/ACE.html

C+ +庫的代表,超重量級的網路通訊開發框架。ACE自適配通訊環境(Adaptive Communication Environment)是可以自由使用、開放原始碼的面向物件框架,在其中實現了許多用於併發通訊軟體的核心模式。 ACE提供了一組豐富的可複用C++ 包裝外觀(Wrapper Facade)和框架元件,可跨越多種平臺完成通用的通訊軟體任務, 其中包括:事件多路分離和事件處理器分派、訊號處理、服務初始化、程序間通訊、共享記憶體管理、 訊息路由、分散式服務動態(重)配置、併發執行和同步,等等。

7. CppUnit

——-http://sourceforge.net/projects/cppuint/

一個c++的單元測試框架,可以通過派生測試類的方式,定製具體的測試方案。xUnit家族的一員, 從JUnit移植而來,JUnit是Java語言的單元測試框架。

vc71環境中編譯安裝

版本:cppunit-1.10.2.tar.gz

直接通過 CppUnitLibraries.dsw 編譯相關的庫

標頭檔案在 %cppunit_root%/cppunit

庫檔案在 %cppunit_root%/lib

標頭檔案新增方法如:

#i nclude 需要連結lib庫

8 Loki

—–http://moderncppdesign.com

—–http://sourceforge.net/projects/loki-lib/

—–http://sourceforge.net/projects/loki-exp/

其實可和Boost一起介紹它,一個實驗性質的庫。作者在loki中把C++模板的功能發揮到了極致。 並且嘗試把類似設計模式這樣思想層面的東西通過庫來提供。同時還提供了智慧指標這樣比較實用的功能。

該庫系模板庫,庫本身無需編譯,在你的工程檔案中 引用標頭檔案就可以使用,如果 你直接或間接使用了small object,那你需要在你的工程檔案 加上 SmallObj.cpp如果 你直接或間接使用了Singletons,那你需要在你的工程檔案 加上 Singleton.cpp

—————————————————————————————–

學術性的C++庫:

—————————————————————————————–

1 FC++: The Functional C++ Library

——–http://www.cc.gatech.edu/~yannis/fc++/

這個庫提供了一些函式式語言中才有的要素。屬於用庫來擴充語言的一個代表作。如果想要在OOP之外尋找另一分的樂趣,可以去看看函式式程式設計的世界。大師Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就將函式式語言列為至少應當學習的6類程式語言之一。

當前版本:FC++.1.5.zip

模板庫,在實際工程中 ,加上要用的標頭檔案 就可以編譯。

2 CGAL

—–http://www.cgal.org

Computational Geometry Algorithms Library的目的是把在計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的使用者。

當前版本:CGAL-3.1.zip

這是一個已編譯的版本,當然也包括完整的原始碼

標頭檔案在 %CGAL_root%/include/CGAL

庫檔案在 %CGAL_root%/lib/msvc7

標頭檔案新增方法如:

#i nclude 需要連結lib庫

—————————————————————————————–

其它目前我感覺還不是很爽的C++庫:

—————————————————————————————–

1 Doxygen

——http://sourceforge.net/projects/doxygen/

——http://www.stack.nl/~dimitri/doxygen/

註釋文件生成工具,較之Doc++功能更為齊全,可以生成包括HTML、PDF、RTF在內的多種格式的文件,並有GUI介面,除了支援c/c++語言外,還支援IDL、java、PHP、c#等

2、 QT(windows版要付錢)

——-http://www.trolltech.com/

——-http://www.qiliang.net/qt.html

Qt是Trolltech公司的一個多平臺的C++圖形使用者介面應用程式框架。它提供給應用程式開發者建立藝術級的圖形使用者介面所需的所用功能。Qt是完全面向物件的很容易擴充套件,並且允許真正地元件程式設計。自從1996年早些時候,Qt進入商業領域,它已經成為全世界範圍內數千種成功的應用程式的基礎。Qt也是流行的Linux桌面環境KDE 的基礎,同時它還支援Windows、Macintosh、Unix/X11等多種平臺。

3、Fox

———http://www.fox-toolkit.org/

開放原始碼的GUI庫。作者從自己親身的開發經驗中得出了一個理想的GUI庫應該是什麼樣子的感受出發,從而開始了對這個庫的開發。有興趣的可以嘗試一下。

4 xml4c

——http://www.alphaworks.ibm.com/tech/xml4c

IBM的XML Parser,用c++語言寫就,功能超級強大。號稱支援多達100種字元編碼,能夠支援中文,適合於大規模的xml應用。若只是很小範圍的應用,則非最佳選擇,畢竟,你需要“揹負”約12M左右的dll的沉重負擔

5 Xerces c++

——-http://xml.apache.org/xerces-c

Apache的XML專案,同樣是c++ 實現,來源於IBM的xml4c,因此程式設計介面也是和xml4c一致的。但是目前只支援少數的字元編碼,如ASCII,UTF-8,UTF-16等,不能處理包含中文字元的XML文件。Xerces-C++ 是一個非常健壯的XML解析器,它提供了驗證,以及SAX和DOM API。XML驗證在文件型別定義(Document Type Definition,DTD)方面有很好的支援,並且在2001年12月增加了支援W3C XML Schema 的基本完整的開放標準。

6 XMLBooster

——-http://www.xmlbooster.com/

這個庫通過產生特製的parser的辦法極大的提高了XML解析的速度,並且能夠產生相應的GUI程式來修改這個parser。在DOM和SAX兩大主流XML解析辦法之外提供了另外一個可行的解決方案。

—————————————————————————————–

C++開發環境(Win平臺下除了 Visual C++ 和 Borland C++以外的):

—————————————————————————————-

1. Cygwin (Windows下的一個Unix模擬環境)

這個Cygwin的一部分是GCC的另外一個Windows移植版本,Cygwin是Windows下的一個Unix模擬環境。嚴格的說是模擬GNU的環境,這也就是”Gnu’s Not Unix”要表達的意思。

至Cygwin的網站http://www.cygwin.com/下載安裝程式setup.exe,可直接點選執行或先行下載至個人電腦後再執行。目前我已經下載到本地了,直接安裝即可。

2. MinGW (GCC的一個Windows移植版本)

1)http://sourceforge.net/projects/mingw 直接訪問的,點選 Files,然後下載以下檔案:MinGW-3.1.0-1.exe, mingw32-make-3.80.0-3.exe。
安裝MinGW 到 C:/MinGW 目錄下,然後安裝 mingw32-make 到 C:/MinGW 下,通過瀏覽器到 C:/MinGW/bin 下,將 mingw32-make.exe 改名或者另外複製為 make.exe。

(以上的設定已經足夠。不過為了求新,我是同時下載了 gcc-core-3.4.2-20040916-1.tar.gz,mingw-runtime-3.5.tar.gz 和 w32api-3.1.tar.gz,將它們直接解壓到 C:/MinGW 下更新舊的檔案。不過這對這篇文章本身沒有任何影響。新舊兩種配置我都測試過。)

安裝次序:

MinGW-3.1.0-1.exe

mingw32-make-3.80.0-3.exe

gcc-core-3.4.2-20040916-1.tar.gz

mingw-runtime-3.5.tar.gz

w32api-3.1.tar.gz

gdb-5.2.1-1.exe

mingw-utils-0.3.tar.gz

binutils-2.15.91-20040904-1.tar.gz

3)準備MinGW 使用者開發的命令列環境(一個批處理)

如: mingw.bat

@rem ————————————–

@SET MINGW_ROOT=D:\Mingw

@rem

@echo Setting environment for using Mingw.

@rem

@set PATH=%MINGW_ROOT%\BIN;%PATH%

@set

INCLUDE=%MINGW_ROOT%\INCLUDE;%MINGW_ROOT%\INCLUDE\c++\3.2.3;%MINGW_ROOT%\include\c++\3.2.3\mingw32;%MINGW_ROOT%\include\c++\3.2.3\backward;%INCLUDE%

@set LIB=MINGW_ROOT\LIB;%LIB%

@rem —————————————-

3. Dev C++ (一個C/C++ 的整合開發環境)

GCC是一個很好的編譯器。在Windows上的C++編譯器一直和標準有著一段距離的時候,GCC就是一個讓Windows下開發者流口水的編譯器。Dev-C++就是能夠讓GCC跑在Windows下的工具,作為整合開發環境,還提供了同專業IDE相媲美的語法高亮,程式碼提示,除錯等功能。由於使用Delphi開發,佔用記憶體少,速度很快,比較適合輕量級的學習和使用。

可以使用 MinGW-GCC 作為它的編譯器

4 Eclipse-CDT

遊戲開發

Audio/Video 3D C++ Programming Library

——http://www.galacticasoftware.com/products/av/

——http://sourceforge.net/projects/av3d/

***3D是一個跨平臺,高效能的C++庫。主要的特性是提供3D圖形,聲效支援(SB,以及S3M),控制介面(鍵盤,滑鼠和遙感),XMS。

KlayGE

——http://home.g365.net/enginedev/

——http://sourceforge.net/projects/klayge/

國內遊戲開發高手自己用C++開發的一個開放原始碼、跨平臺的遊戲引擎。KlayGE是一個開放原始碼、跨平臺的遊戲引擎,並使用Python作指令碼語言。KlayGE在LGPL協議下發行。感謝龔敏敏先生為中國遊戲開發事業所做出的貢獻。

OGRE

——http://www.ogre3d.org

——http://www.ogre3d.org/docs/manual/

——http://sourceforge.net/projects/ogre

OGRE(面向物件的圖形渲染引擎)是用C++開發的,使用靈活的面向物件3D引擎。 它的目的是讓開發者能更方便和直接地開發基於3D硬體裝置的應用程式或遊戲。引擎中的類庫對更底層的系統庫 (如:Direct3D和OpenGL)的全部使用細節進行了抽象, 並提供了基於現實世界物件的介面和其它類。