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等。
來自:http://blog.csdn.net/wenrenhua08/article/details/40040903