1. 程式人生 > >C++開原始碼專案彙總

C++開原始碼專案彙總

Google的C++開原始碼專案

v8  -  V8 JavaScript Engine
V8 是 Google 的開源 JavaScript 引擎。
V8 採用 C++ 編寫,可在谷歌瀏覽器(來自 Google 的開源瀏覽器)中使用。
V8 根據 ECMA-262 第三版中的說明使用 ECMAScript,並在使用 IA-32 或 ARM 處理器的 Windows XP 和 Vista、Mac OS X 10.5 (Leopard) 以及 Linux 系統中執行。
V8 可以獨立執行,也可以嵌入任何 C++ 應用程式中。
 
nativeclient  -  Native code for web apps
Native Client是一個在Web應用程式中執行原生代碼(目前只支援x86架構)的開源的研究性技術,提供更好的“富客戶端”使用者體驗。它允許網路開發者編寫更強大的Web程式,這些程式直接通過系統執行而不用通過瀏覽器來進行,據Google稱,它到最後將允許網路開發者開發和桌面軟體一樣的的web程式,這些程式將帶來更快的速度。Native Client類似於微軟的ActiveX技術,它還能在Linux和Mac OS X下執行。目前它尚未支援IE,僅支援Google Chrome, Firefox, Safari 和Opera。
 
tesseract-ocr - An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google.
OCR(Optical Character Recognition):光學字元識別,是指對圖片檔案中的文字進行分析識別,獲取的過程。
Tesseract:開源的OCR識別引擎,初期Tesseract引擎由HP實驗室研發,後來貢獻給了開源軟體業,後經由Google進行改進,消除bug,優化,重新發布。當前版本為3.01.
 
google-glog  -  Logging library for C++
Google glog是一個基於程式級記錄日誌資訊的c++庫,程式設計使用方式與c++的stream操作類似,例:
LOG(INFO) << "Found " << num_cookies << " cookies";
 
double-conversion  -  Binary-decimal and decimal-binary routines for IEEE doubles.
從V8引擎中抽出的有關數值計算相關的程式碼,包括大數計算,數值到字串轉換等
 
googletest  -  Google C++ Testing Framework
gtest測試框架[1]是在不同平臺上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)為編寫C++測試而生成的。它是基於xUnit架構的測試框架,支援自動發現測試,豐富的斷言集,使用者定義的斷言,death測試,致命與非致命的失敗,型別引數化測試,各類執行測試的選項和XML的測試報告。
 
googlemock  -  Google C++ Mocking Framework
googlemock  mock技術,在c++單元測試可以隨意修改函式行為的技術。   
googlemock是google基於gtest開發的mock框架,適用於c++單元測試。
 
libphonenumber  -  Google's phone number handling library, powering Android and more
一個專門用於處理電話號碼的庫
 
google-diff-match-patch  -  Diff, Match and Patch libraries for Plain Text
google-diff-match-patch這個類庫提供了強大的演算法用於純文字內容的差異比較,匹配,打補丁,實現同步純文字所需要執行一些操作。支援多種語言包括:Java、JavaScript、C++、C#、Objective C、Lua和Python。
 
libkml  -  a KML library written in C++ with bindings to other languages
libKML是解析,生成和操作KML的庫。使用OGC KML2.2標準。
KML,是 Keyhole 標記語言(Keyhole Markup Language)的縮寫,是一種採用 XML 語法與格式的語言,用於描述和儲存地理資訊(如點、線、影象、多邊形和模型等),可以被 Google Earth 和 Google Maps 識別並顯示。您可以使用 KML 來與其他 Google Earth 或 Google Maps 使用者分享地標與資訊。當然,您也可以從 Google Earth 社群 等相關網站獲得有趣的 KML 檔案。Google Earth 和 Google Maps 處理 KML 檔案的方式與網頁瀏覽器處理 HTML 和 XML 檔案的方式類似。像 HTML 一樣,KML 使用包含名稱、屬性的標籤(tag)來確定顯示方式。因此,您可將 Google Earth 和 Google Maps 視為 KML 檔案瀏覽器。單擊此處可獲得更多資訊。
 
gdata-cpp-util  -  Google Data APIs C++ utility library
一個Google Data APIs 的工具庫,可以GET/POST/PUT/DELETE
 
lutok  -  Lightweight C++ API for Lua
是一個 Lua 的 C++ wrapper
Lua 是一個小巧的指令碼語言。是巴西里約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)裡的一個研究小組,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所組成並於1993年開發。 其設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。Lua由標準C編寫而成,幾乎在所有作業系統和平臺上都可以編譯,執行。Lua並沒有提供強大的庫,這是由它的定位決定的。所以Lua不適合作為開發獨立應用程式的語言。Lua 有一個同時進行的JIT專案,提供在特定平臺上的即時編譯功能。
 
dcs-bwt-compressor  -  Data compressor program and library
dcsbwt是一個基於Burrower-Wheeler變換的資料壓縮程式庫
 
treetree  -  generic n-ary trees for C++
TreeTree (http://code.google.com/p/treetree/)是一個只包含標頭檔案的 C++ Library。它實現了一個通用的 樹形結構容器類(遵守 STL約定),並且實現了 operator >> 和 operator <<。
它的底層包含一個雙向連結串列。在前項指標和後項指標以外,每個樹節點還包含第三個指標--指向所有子節點的列表。這個實現高效,並且 API 非常清晰。TreeTree 可以表達任何使用Lisp的S表示式能表達的東西(例如推理樹(inference trees, programs)等)。
可以使用前序和後序遍歷,只遍歷某個節點的子節點,或者只是在葉子節點遍歷。示例的選項還包含遍歷子樹(如f(g(x,y),z) 前序遍歷,是f(g(x,y),z), g(x,y),x,y和z.
 
ctemplate  -  Powerful but simple template language for C++
ctemplate (Google-ctemplate)的設計哲學是輕量級,快速,且邏輯和介面分離,因此和ClearSilver和Teng是有一些差異的。比如Ctemplate就沒有模板函式,沒有條件判斷和迴圈語句(當然,它可以通過變通的方式來實現)。   ctemplate大體上分為兩個部分,一部分是模板,另一部分是資料字典。模板定義了介面展現的形式(V),資料字典就是填充模板的資料(M),你自己寫業務邏輯去控制介面展現(C),典型的MVC模型。
 
sparsehash  -  An extremely memory-efficient hash_map implementation
Google Sparse Hash 是 Google 一個很節省記憶體的 hash map 實現
 
gflags  -  Commandline flags module for C++
Google GFlags 是一個命令列標記的處理庫,它可以替代“getopt()”,其內建對C++的支援比如string。
 
protobuf  -  Protocol Buffers - Google's data interchange format
Google Protocol Buffer 是一個平臺無關、語言無關的結構化資料的序列化與反序列化工具。
protocol buffer,可以用來在跨程序、跨機器,不同作業系統,不同程式語言之間進行資料交換。類似於微軟的COM IDL或者XML,但是解析速度更快,需要傳輸位元組數更少。(c+
+, java, python)
 
gperftools  -  Fast, multi-threaded malloc() and nifty performance analysis tools 
TCMalloc,heap檢測,是一個google用於效能檢測的工具。(c++)
 
google-breakpad  -  Crash reporting

breakpad,一個專案的開始需要做一些什麼樣的基礎設施,crash dump和執行logging毫無疑問都是應該有的,這個專案就是負責在crash的時候收集資訊,發出crash dump報告的。

經典的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 GeometryAlgorithms Library計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的使用者。

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

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

QT ----------大名頂頂的一個多平臺的C++圖形使用者介面應用程式框架(GUI庫)可氣的是他的Windows版是商業釋出的要付費

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

Xerces c++ --Apache的XML專案, 但 只支援少數的字元編碼,如ASCII,UTF-8,UTF-16等,不能處理包含中文字元的XML文件

XMLBooster -----  也是一種  XML的 解析工具

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

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

Cygwin --------Windows下的一個Unix模擬環境

MinGW  --------GCC的一個Windows移植版本

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

Eclipse-CDT  ----IMB 開發的一個整合開發環境,一般用來作為Java 開發環境,但由於Eclipse 是通過外掛體系來擴充套件功能,這裡我們 安裝 CDT外掛後,就可以用來作為C++整合開發環境工具。

50個知名的開源網站

1、http://snippets.dzone.com/tag/c/--數以千計的有用的C語言原始碼片段

2、http://www.hotscripts.com/category/c-cpp/scripts-programs/Hotscripts --提供數以百計的C和C++指令碼和程式。所有程式都分為不同的類別。

3、http://www.planetsourcecode.com/vb/default.asp?lngWId=3--超過萬行C和C++免費的原始碼

4、http://freshmeat.net/browse/164/--超過9000個C編寫的專案。

5、http://www.daniweb.com/code/c.html--DANIWEB提供的實用程式碼段。

6、http://www.programmersheaven.com/tags/C/--programmersheaven.com上的C程式設計資源。

7、http://www.ddj.com/code/ddj.html--Dr. Dobb’s Journal的原始碼。

8、http://www.cprogramming.com/cgi-bin/source/source.cgi--C和C + +程式設計資源。

9、http://www.codecogs.com/--CodeCogs是一項協作的開放原始碼庫,C/C++的數值方面的元件。

10、http://www.google.com/codesearch?q=programming++lang:c&cs_r=lang:c--谷歌程式碼的C原始碼。

11、http://www.codepedia.com/1/C--CodePedia是一個開放的關於系統程式設計和其他與電腦有關的議題。

12、http://www.cis.temple.edu/~ingargio/cis71/code/--為學生提供的一個簡單的C語言程式的列表。

13、http://www.codeproject.com/?cat=2--codeproject提供的C/C++資原始碼專案。

14、http://www.thefreecountry.com/sourcecode/cpp.shtml--以下是一些C和C++庫的DLL,VCLs,原始碼,元件,模組,應用程式框架,類庫,原始碼片段等,你可以在您的專案中使用而不需要支付費用和版稅。

15、http://people.sc.fsu.edu/~burkardt/cpp_src/cpp_src.html--這是一個全面的關於C++的345個原始碼清單。

16、http://www.cplusplus.com/src/--C++寫的通用控制檯程式和Windows程式程式碼清單。

17、http://users.cs.fiu.edu/~weiss/dsaa_c++/code/--C++語言資料結構與演算法分析(第二版)的原始碼。

18、http://c.snippets.org/--C原始碼片段。

19、http://www.bbdsoft.com/downloads.html--C++原始碼。

20、http://www.moshier.net/天文學和數值軟體原始碼

21、http://cplus.about.com/od/cgames/C_Games_with_Source_Code.htm--遊戲有關的C++原始碼。

22、http://cliodhna.cop.uop.edu/~hetrick/c-sources.html--免費的C/C++數值計算原始碼。

23、http://www.mathtools.net/C_C__/Utilities/index.html--C/C++工具。

24、http://www.programmerworld.net/resources/c_library.htm--免費C++原始碼和其它有用的工具。

25、http://www.cmcrossroads.com/bradapp/links/cplusplus-links.html--布拉德阿普爾頓的C++連結-資源,專案,圖書館,教學和編碼。

26、http://www.robertnz.net/cpp_site.html--這是一個收集了數C/C++網站連結列表的網頁。

27、http://www.josuttis.com/libbook/examples.html--在這裡,你可以看到並下載所有的本書的C++標準庫例子。

28、ftp://66.77.27.238/sourcecode/cuj/--C/C++使用者雜誌

29、ftp://66.77.27.238/sourcecode/wd/--Windows開發者網路

30、http://www.einet.net/directory/65892/Developers.htm--C程式

31、http://www.daniweb.com/code/cplusplus.html--實用程式碼段。

32、http://snippets.dzone.com/tag/c--C++原始碼

33、http://www.programmersheaven.com/tags/C--C++程式設計資源,programmersheaven.com

34、http://www.google.com/codesearch?hl=en&lr=&q=programming--谷歌程式碼搜尋-C++程式語言

35、http://www.codepedia.com/1/Cpp--CodePedia是一個開放的關於系統程式設計和其他與電腦有關的議題的網站。

36、http://www.codebeach.com/index.asp?TabID=1&CategoryID=3--C++原始碼,Codebeach提供

37、http://freshmeat.net/browse/165/--5000專案寫的C++程式語言

38、http://cplus.about.com/od/codelibrary/Code_Library_for_C_C_and_C.htm--程式碼庫C、C + +和C#。

39、http://www.c.happycodings.com/--Visual Basic、PHP、ASP技術、C、C++大全。

40、http://www.blueparrots.com/--Borland C遊戲,影象和聲音原始碼範例。

41、http://www.java2s.com/Code/Cpp/CatalogCpp.htm--C++原始碼。

42、http://www.yeohhs.com/modules/mydownloads/--C與C++電子書和原始碼示例。

43、http://www.brpreiss.com/books/opus4/programs/index.htmlC++的數學方程和公式原始碼。

44、http://users.cs.fiu.edu/C++。

45、http://www.josuttis.com/libbook/examples.html--C++標準庫-教程和參考資料。

46、http://emr.cs.uiuc.edu/~reingold/calendars.shtmlEdward M. Reingold's Calendar Book, Papers, and Code。

47、http://cpp.snippets.org/--c++原始碼檔案。

48、http://ubiety.uwaterloo.ca/~tveldhui/papers/techniques/--用C和C++的解決科學問題。

49、http://c.ittoolbox.com/topics/core-c/--C/C++的IT工具框。

50、http://www.le.ac.uk/cc/tutorials/c/ccccdbas.html--本檔案中包含有大量的C示例程式

下面結合自己多年的開發經驗,想到哪裡寫到哪裡,希望對新人有一定的幫助。

一、網路

網路庫必須掌握 ACE 和 libevent, 一個是重量級的網路庫, 一個是輕量級的網路庫。仔細想想,現在那個程式不用網路啊。不懂網路,你將寸步難行啊。熟悉這兩個開源庫的    前提是你必須懂socket的原理,給大家推薦的好書就是《UNIX網路程式設計》,看懂這本書就可以了,其他的什麼《windows網路程式設計》這些都不用看,因為網路程式設計,你學會了伯克利的套接字,你就可以在任何平臺上進行網路程式設計了,不需要學什麼windows下的網路程式設計,因為windows下的網路也是從伯克利套接字搞過來的,如果你學習《windows網路程式設計》,那麼你那天在linux,unix下進行網路程式設計,你還得在學習一下。沒有那個必要。

二、資料庫

資料庫嘛,開源的Mysql和開源的PostgreSQL只要懂其中一個就可以了,商業資料庫在掌握一個Oracle就可以了,檔案資料庫掌握 sqlite。不過請大家注意,不要被上面資料庫名字給迷惑了,資料庫的本質是SQL語句,一定要懂資料庫的基本原理,熟練應用SQL語言,懂資料庫的優化,儲存過程等。資料庫的原理搞懂了,拿什麼資料庫過來都輕鬆掌握,就不會在乎是Mysql還是Oracle了。

三、日誌操作

日誌操作推薦大家熟悉 log4cpp這個日誌庫, 支援多執行緒, 日誌重定向到網路等都有, 反正你能想到的日誌的功能都有。日誌嘛,一個是方便查詢問題,方便記錄程式執行的一些情況。這是必須的。

四、管理後臺

眾所周知,寫程式是給其他人用的,不是自己用,所以在程式的易用性上,多給對方提供一些可以直接檢視的管理介面,顯得分成重要。為程式提供一個web的管理介面,方便使用者登入上去檢視程式的各種資訊,很有必要。

五、讀取配置檔案

所有的程式都必須有配置檔案,方便配置一些專案,為程式提供靈活性。 所以寫程式,必須有讀取配置檔案的封裝類。

六、記憶體池

所有的程序都需要分配記憶體,對C/C++來說,分配和管理記憶體是已經很有挑戰性的工作。給大家推薦 nedmalloc 這個開源的記憶體池庫。nedmalloc是一個跨平臺的高效能多執行緒記憶體分配庫,很多庫都使用它。

七、快取庫

眾所周知,快取庫用得最多的就是memcache了。在做資料庫開發的時候特別有用。

八、指令碼

指令碼是一個很有意思的東西,很多功能,其實我們只要寫個指令碼就可以完成,程式碼量少,開發速度快。必須掌握的指令碼,比較通用的要算 perl 了,很古老的語言,但是功能太強大了。我可以保證的說,.net,java能幹的工作,肯定可以讓perl來幹。C能幹的, perl不一定能幹。perl作為linux,unix的系統整合的指令碼語言,必須學會。

lua 語言,在遊戲行業用得比較多。

python 指令碼,功能很強大,推薦學。

上面這些是所有程式都會用到的比較通用的功能。

在不同的應用領域,需要掌握不同開源庫,比如搞遊戲開發的,可能需要掌握開源的UI庫CEGUI、duilib, 開源的3D引擎OGRE等。