• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

整理好的C/C++ 开源库及示例代码

OC/C/C++ 开心洋葱 1233次浏览 0个评论

== 10.4 浏览器整合 ==

CEF(Chromium Embedded Framework)

Home:[https://bitbucket.org/chromiumembedded/cef]

Links:[https://en.wikipedia.org/wiki/Chromium_Embedded_Framework Wikipedia]

如其名,它提供了嵌入 Chrome 浏览器的框架。采用 C++ 开发。好几个商业公司(Google、Adobe、Facebook、Evernote…)的产品用到它。

以下是其它开源项目针对 CEF 的扩展,提供了其它编程语言的绑定。

* dotNet – [https://github.com/chillitom/CefSharp]

* dotNet (CEF1) – [https://bitbucket.org/fddima/cefglue]

* dotNet/Mono (CEF3) – [https://bitbucket.org/xilium/xilium.cefglue]

* dotNet (CEF3) – [https://bitbucket.org/chromiumfx/chromiumfx]

* Java – [https://bitbucket.org/chromiumembedded/java-cef]

* Go – [https://github.com/CzarekTomczak/cef2go]

* Delphi (CEF3) – [https://github.com/hgourvest/dcef3]

PhantomJS

Home:[http://phantomjs.org/]

Links:[https://en.wikipedia.org/wiki/PhantomJS Wikipedia]

2011年才诞生的。基于 C++ 开发,整合了 WebKit。

它本身没有提供 GUI 界面。但是提供了 JavaScript 的 API,让你可以操纵 WebKit 引擎。可以利用它进行 Web 界面的单元测试。

== 10.5 (其它) ==

WebSocket++

Home:[http://www.zaphoyd.com/websocketpp/]

顾名思义,它提供了 [https://en.wikipedia.org/wiki/WebSocket WebSocket] 的 C++ 封装,基于 Boost Asio 构建。

支持多种操作系统平台,支持 TLS、proxy、IPv6。

—-

= 11 信息安全 =

== 11.1 密码学 ==

Crypto++

Docs:[http://www.cryptopp.com/docs/ref/annotated.html]

Crypto++ 前面已经介绍过。它提供了常见的对称加密算法(DES、AES、IDEA 等)、公钥加密算法(RSA、DSA 等)、散列算法(MD5、SHA1、RIPEMD 等)。

代码示例——计算 SHA256 散列值#include
using namespace CryptoPP;

const byte* pbData = …; // 要计算的数据的地址
unsigned int nDataLen = …; // 字节数
byte abDigest[SHA256::DIGESTSIZE];
SHA256().CalculateDigest(abDigest, pbData, nDataLen);
// 注:abDigest 中通常会包含不可见字符,要输出为可见字符串需要做一下 Hex 编码

OpenSSL

Home:[https://www.openssl.org/]

Links:[https://en.wikipedia.org/wiki/OpenSSL Wikipedia] [https://zh.wikipedia.org/wiki/OpenSSL 维基百科]

OpenSSL 基于 C 语言开发,在加密领域那可是大名鼎鼎。大部分常用的加密算法(对称、非对称)和散列算法,它都支持。

很多知名的软件(包括 Web Server)用到它,所以2014年的“[https://zh.wikipedia.org/wiki/%E5%BF%83%E8%84%8F%E5%87%BA%E8%A1%80%E6%BC%8F%E6%B4%9E 心脏滴血漏洞]”让好多网站中招。

LibreSSL

Home:[http://www.libressl.org/]

Links:[https://en.wikipedia.org/wiki/LibreSSL Wikipedia] [https://zh.wikipedia.org/wiki/LibreSSL 维基百科]

OpenSSL 爆出“心脏滴血漏洞”之后,OpenBSD 社区的程序员复制了 OpenSSL 版本 1.0.1g 的代码,然后另起炉灶。

LibreSSL 的主要目标是“安全性”,其维护人员删除了原 OpenSSL 中大量过时的代码,替换了相关的内存管理函数(规避缓冲区溢出),增强了随机数生成算法….

GnuTLS

Home:[http://gnutls.org/]

Links:[https://en.wikipedia.org/wiki/GnuTLS Wikipedia]

采用 C 语言开发,名气也挺大。如其名,主要提供 TLS/SSL 的相关功能。

NaCl

Home:[http://nacl.cr.yp.to/]

Links:[https://en.wikipedia.org/wiki/NaCl_%28software%29 Wikipedia]

这个名称是“Networking and Cryptography library”的缩写。

它采用 C 语言开发,另有其它编程语言(Python、Ruby、PHP)的 API 绑定。

它的作者同时也是 [https://en.wikipedia.org/wiki/Qmail qmail] 和 [https://en.wikipedia.org/wiki/Curve25519 Curve25519] 的作者。

libsodium

Home:[https://github.com/jedisct1/libsodium]

它派生自 NaCl,提供了跟 NaCl 兼容的 API。支持的操作系统平台更多。

shadowsocks 和 dnscrypt-proxy 用到它。

Keyczar

Home:[https://github.com/google/keyczar]

这是 Google 提供的加密库,同时提供 C++、Java、Python 三种语言的实现。

它提供了比较高层的 API, 使用者无需关心太多的细节。

代码示例——加密/解密文本#include
#include
#include
#include

void test(const std::string& key_location)
{
keyczar::Keyczar* crypter = keyczar::Crypter::Read(key_location);
if(!crypter)
{
return;
}

std::string plain = “Secret message”;
std::cout << "Plain text: " << plain << std::endl; std::string cipher; if(crypter->Encrypt(plain, &cipher))
{
std::cout << "Cipher text (Base64w): " << cipher << std::endl; std::string decrypted; if(crypter->Decrypt(cipher, &decrypted))
{
assert(plain == decrypted);
}
}
delete crypter;
}

POCO::Crypto

Docs:[http://pocoproject.org/docs/Poco.Crypto.html]

POCO 前面已经介绍过。它提供了常见的加密算法和哈希算法。

—-

= 12 处理文件格式 =

== 12.1 结构化数据格式 ==

=== 12.1.1 CSV ===

[https://en.wikipedia.org/wiki/Comma-separated_values CSV] 是一种历史悠久的结构化数据存储格式。其效果类似于一张数据库二维表。

Boost.Tokenizer

Docs:[http://boost.org/libs/tokenizer]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,用来灵活地切割字符串。使用它,可以帮你提取 CSV 的行和列。

=== 12.1.2 JSON ===

JSON 格式源自 JavaScript,如今在 Web 开发中广为应用。

Boost.PropertyTree

Docs:[http://boost.org/libs/property_tree]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,封装了某种特殊的“树”结构(property_tree)。它支持对 JSON 的读写。

代码示例——读写 JSON 字符串#include
#include
#include

using boost::property_tree::ptree;
using boost::property_tree::read_json;
using boost::property_tree::write_json;

// Write json
ptree pt1;
pt1.put(“foo”, “bar”);
std::ostringstream oss;
write_json(oss, pt1, false);
std::string json = oss.str(); // {“foo”:”bar”}

// Read json
std::istringstream iss(json);
ptree pt2;
read_json(iss, pt2);
std::string value = pt2.get(“foo”);

POCO::JSON

Docs:[http://pocoproject.org/docs/package-JSON.JSON.html]

POCO 前面已经介绍过。它提供了 JSON 的封装类

rapidjson

Home:[https://github.com/miloyip/rapidjson]

这是一个 C++ 的 JSON 库。提供了 SAX 和 DOM 风格的 API。

(另,作者是香港同胞)

jsoncpp

Home:[https://github.com/open-source-parsers/jsoncpp]

如其名,这是个 C++ 的 JSON 封装库。

=== 12.1.3 YAML ===

[https://en.wikipedia.org/wiki/YAML YAML] 是一种类似于 json 的结构化数据格式。它在确保可读性的基础上,提供了超越 json 的灵活性和扩展性。

yaml-cpp

Home:[https://github.com/jbeder/yaml-cpp]

C++ 实现的 YAML 解析器。

LibYAML

Home:[http://pyyaml.org/wiki/LibYAML]

C 语言实现的 YAML 解析器。

== 12.2 压缩文件 & 打包文件 ==

=== 12.2.1 综合性的库 ===

libarchive

Home:[http://www.libarchive.org/]

C 语言实现,支持的格式:

可读写的格式:zip、gzip、bzip2、xz、lzma、tar、ISO、cpio、ar、pax、mtree;

只读的格式:7z、rar、cab、rpm、lzh、lzop、raw、xar

LZMA SDK

Home:[http://www.7-zip.org/sdk.html]

这是由 7-zip 官方提供的。7-zip 就是用它进行压缩/解压缩。

支持的格式:7z、LZMA、LZMA2、XZ

PhysicsFS

Home:[http://icculus.org/physfs/]

Links:[https://en.wikipedia.org/wiki/PhysicsFS Wikipedia]

针对不同的压缩/归档格式,提供了类似 VFS 的抽象封装层。主要用于游戏开发中。

支持的格式:zip、7z、GRP、PAK、HOG、MVL、WAD…

zopfli

Home:[https://github.com/google/zopfli]

这是由 Google 开发的 C 库,提供对 zip 和 gzip 格式的压缩(不提供解压)。

压缩的速度比较慢,但是可以得到更高的压缩率。

=== 12.2.2 zip ===

[https://en.wikipedia.org/wiki/Zip_%28file_format%29 格式说明]

libzip

Home:[http://www.nih.at/libzip/]

Links:[https://en.wikipedia.org/wiki/Libzip Wikipedia]

用 C 语言开发的库,基于 zlib 库。

Poco::Zip

Docs:[http://pocoproject.org/docs/Poco.Zip.html]

POCO 前面已经介绍过。它提供了若干封装类,用于 zip 格式的压缩和解压。

=== 12.2.3 bzip2(bz2) ===

[https://en.wikipedia.org/wiki/Bzip2 格式说明]

libbzip2

Home:[http://bzip.org/]

这是 bzip2 官方提供的库,C 语言实现。

=== 12.2.4 gzip(gz) ===

zlib

Home:[http://zlib.net/]

Links:[https://en.wikipedia.org/wiki/Zlib Wikipedia] [https://zh.wikipedia.org/wiki/Zlib 维基百科]

C 语言实现,诞生于1995年,被大量的开源项目使用(OpenSSL、OpenSSH、Apache、PostgreSQL、Git、libpng……)。

=== 12.2.5 tar ===

libtar

Home:[http://www.feep.net/libtar/]

基于 C 语言开发,可以对 tar 格式添加内容或读取内容。

=== 12.2.6 rar ===

unrarlib

Home:[http://www.unrarlib.org/]

该项目的开发已经停止。只支持对 RAR2 格式的解压缩。

=== 12.2.7 snappy ===

snappy

Home:[https://google.github.io/snappy/]

由 Google 开发的压缩格式,特点是非常快(不论是压缩还是解压);但是压缩率不如 gzip。

起先被用于 Google 内部的 BigTable,如今被用于多种 NoSQL 数据库(比如:Cassandra、Hadoop、LevelDB、MongoDB、RocksDB…)

支持多种语言的绑定(C#、Common Lisp、Erlang、Go、Haskell、Lua、Java、Node.js、Perl、PHP、Python、R、Ruby、Smalltalk)

=== 12.2.8 Brotli ===

Brotli

Home:[https://github.com/google/brotli]

Links:[https://en.wikipedia.org/wiki/Brotli Wikipedia]

由 Google 开发的压缩格式,压缩率很高(据说高于 LZMA 和 bz2)。

该算法很新,是2015年9月才发布的。

=== 12.2.9 LZFSE ===

LZFSE

Home:[https://github.com/lzfse/lzfse]

Links:[https://zh.wikipedia.org/wiki/LZFSE 维基百科]

由苹果开发的压缩格式。苹果称它的压缩率与“ZLib level 5”相似,但速度快2至3倍。

该算法是前不久(2016年7月)才开源出来的。

== 12.3 标记语言 ==

=== 12.3.1 XML ===

Expat

Home:[http://www.libexpat.org/]

Links:[https://en.wikipedia.org/wiki/Expat_(library) Wikipedia]

基于 C 语言实现,诞生于1998年。很多知名的开源项目(Apache Server、Firefox、Python、PHP、Perl)用到它。

libxml2

Home:[http://xmlsoft.org/]

Links:[https://en.wikipedia.org/wiki/Libxml2 Wikipedia]

基于 C 语言实现,诞生于1999年。提供了多种语言(C++、Python、Ruby、Common Lisp、PHP、Perl)的 API 绑定。

wxWidgets

Docs:[http://docs.wxwidgets.org/trunk/group__group__class__xml.html]

wxWidgets 前面已经介绍过。它提供了 XML 的封装类,其内部是基于 Expat 进行解析。

POCO::XML

Docs:[http://pocoproject.org/docs/package-XML.XML.html]

POCO 前面已经介绍过。它提供了 XML 的封装类。

libxml++

Home:[http://libxmlplusplus.sourceforge.net/]

如其名,它是针对前面提到的 libxml2 的 C++ 封装。

=== 12.3.2 HTML ===

htmlcxx

Home:[http://htmlcxx.sourceforge.net/]

如其名,是基于 C++ 开发的。支持 HTML 和 CSS 的解析。

== 12.4 PDF ==

PoDoFo

Home:[http://podofo.sourceforge.net/]

基于 C++ 开发的跨平台库,名称取自“Portable Document Format”每个单词的头两个字母 :)

它既支持 PDF 文件的生成,也支持 PDF 内容的提取。它同时还提供[http://podofo.sourceforge.net/tools.html 一堆命令行的小工具],用来操作 PDF 文件。

LibHaru

Home:[http://libharu.org/]

Links:[https://en.wikipedia.org/wiki/LibHaru Wikipedia]

它是基于 C 语言开发的跨平台库,可以用来生成 PDF 文件格式。

代码示例#include

// 创建文档对象
HPDF_Doc doc = HPDF_New(error_handler, NULL);
if(!doc)
{
printf(“ERROR: cannot create pdf object.\n”);
return 1;
}

// 设置文档属性
HPDF_SetCompressionMode(doc, HPDF_COMP_ALL);
HPDF_SetPageMode(doc, HPDF_PAGE_MODE_USE_OUTLINE);
HPDF_SetPassword(doc, “owner pwd”, “user pwd”);

// 添加一页
HPDF_Page page_1 = HPDF_AddPage(doc);
// 设置页属性
HPDF_Page_SetSize(page_1, HPDF_PAGE_SIZE_B5, HPDF_PAGE_LANDSCAPE);

// 保存到文件
HPDF_SaveToFile(doc, “test.pdf”);

// 结束
HPDF_Free(doc);

== 12.5 MS Office 文档 ==

wvWare

Home:[http://wvware.sourceforge.net/]

它能够读取 Word 文档的内容,支持的 Word 版本是(2000、97、95、6)。

AbiWord 和 KWord 用到它。

== 12.6 RTF ==

LibRTF

Home:[http://sourceforge.net/projects/librtf/]

C 语言实现的库,可以解析 RTF 文件格式。

== 12.7 CHM ==

CHMLIB

Home:[http://www.jedrea.com/chmlib/]

这是一个轻量级的库,基于 C 语言开发,可以用来提取 CHM 格式文件的内容。

它提供了多种编程语言(C++、Python、Perl、Common Lisp)的 API 绑定。

libCHMxx

Home:[http://www.mare.ee/indrek/libchmxx/]

它就是基于 CHMLIB 的 C++ 封装库。

—-

= 13 图像 =

== 13.1 图像处理 ==

ImageMagick

Home:[http://imagemagick.org/]

Links:[https://en.wikipedia.org/wiki/ImageMagick Wikipedia] [https://zh.wikipedia.org/wiki/ImageMagick 维基百科]

ImageMagick 可说是最强大的开源图片处理工具集,采用 C 语言编写。诞生于1990年,其开发至今依然非常活跃。支持非常多的操作系统平台。

它提供许多编程语言的 API,对于 C++ 是 [http://www.imagemagick.org/Magick++/ Magick++],对于 C 是 [http://imagemagick.org/script/magick-wand.php MagickWand]

Boost.GIL(Generic Image Library)

Docs:[http://boost.org/libs/gil]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,实现了图像处理功能。

代码示例——调整图像尺寸#include
#include
#include
#include
#include

using namespace boost::gil;

rgb8_image_t img;
jpeg_read_image(“input.jpg”, img);

// Scale the image to 100×100 pixels using bilinear resampling
rgb8_image_t square(100, 100);
resize_view(const_view(img), view(square), bilinear_sampler());
jpeg_write_view(“output.jpg”, const_view(square));

Dlib

Docs:[http://dlib.net/imaging.html]

Dlib 前面已经介绍过。它提供了常见的图像处理功能(旋转、剪切、拉伸、过滤)。

== 13.2 图像格式转换 ==

ImageMagick

ImageMagick 前面已经介绍过。它支持非常多的图片格式([http://imagemagick.org/script/formats.php 清单]),基本上你听说过的,它都支持。甚至包括 Postscript 和 PDF。

在支持的格式中,它可以实现其中几十种格式的相互转换。

== 13.3 图像渲染 ==

Cairo

Home:[http://cairographics.org/]

Links:[https://en.wikipedia.org/wiki/Cairo_%28graphics%29 Wikipedia] [https://zh.wikipedia.org/wiki/Cairo_(%E7%B9%AA%E5%9C%96) 维基百科]

它提供了矢量图像的渲染功能。支持多种后端输出(Win32 GDI、OpenGL、Xlib、XCB、PDF、PNG、SVG ……)。

基于 C 语言开发,提供多种语言绑定(C++、Java、C#、Python、Ruby、Perl、Scheme、Smalltalk)。

cairomm

Home:[http://cairographics.org/cairomm/]

这是针对 Cairo 的 C++ 封装库。

Skia

Home:[https://github.com/google/skia]

Links:[https://en.wikipedia.org/wiki/Skia_Graphics_Engine Wikipedia] [https://zh.wikipedia.org/wiki/Skia_Graphics_Library 维基百科]

它是 Google 基于 C++ 开发的图像渲染库。支持多种后端输出(rasterization、OpenGL、PDF、SVG、SWF ……)。

原先由 Skia 公司开发,后来该公司被 Google 收购。被用于 Android、Chrome、Chrome OS、Firefox 等知名开源项目。

PBRT(Physically Based Rendering Toolkit)

Home:[http://pbrt.org/]

基于光线追踪的物理渲染系统,采用 C++ 开发。

== 13.4 计算机视觉 ==

OpenCV

Home:[http://opencv.org/]

Links:[https://en.wikipedia.org/wiki/OpenCV Wikipedia] [https://zh.wikipedia.org/wiki/OpenCV 维基百科]

它是一个跨平台的计算机视觉库,由 Intel 发起并参与开发。开发语言是 C 和 C++。

提供其它编程语言(Python、Java、MATLAB/OCTAVE …)的 API 绑定。

—-

= 14 多媒体 =

== 14.1 多媒体框架 ==

FFmpeg

Home:[http://ffmpeg.org/]

Links:[https://en.wikipedia.org/wiki/FFmpeg Wikipedia] [https://zh.wikipedia.org/wiki/FFmpeg 维基百科]

名气非常大的开源多媒体框架,基于 C 和汇编开发,支持多种操作系统。

另外,该开源项目还提供了若干命令行工具,包含了一些辅助功能。

* ffmpeg 格式转换工具

* ffplay 简化版的播放器

* ffserver 流媒体服务器

* ffprobe 显示多媒体文件信息

几个知名的开源播放器(VLC、MPC-HC、xine)用到它,Google Chrome 也用到它。

Libav

Home:[http://libav.org/]

Links:[https://en.wikipedia.org/wiki/Libav Wikipedia]

它是2011年从 FFmpeg 派生出来的。基于 C 语言开发,支持多种操作系统。

== 14.2 视频库 ==

libavcodec

Home:[http://ffmpeg.org/]

它来自于 FFmpeg 社区,基于 C 语言实现,提供了多种视频格式和音频格式的编码/解码功能。

由于 Libav 从 FFmpeg 分裂出来,Libav 下也带有一个同名的库。

== 14.3 音频库 ==

PortMedia & PortAudio

Home:[http://www.portaudio.com/]

Links:[https://en.wikipedia.org/wiki/PortAudio Wikipedia]

PortAudio 是 PortMedia 的组成部分,提供了音频的播放和录制功能。支持多种底层 API(ALSA、DirectSound、WASAPI、ASIO…)

OpenAL

Home:[http://www.openal.org/]

Links:[https://en.wikipedia.org/wiki/OpenAL Wikipedia] [https://zh.wikipedia.org/wiki/OpenAL 维基百科]

C 语言开发的 3D 音效库,跨平台。最初由 Loki Software 开发。Loki 倒闭以后,这个项目由开源社区继续维护。

—-

= 15 游戏 =

== 15.1 综合性的游戏引擎 ==

id Tech 系列

Links:[https://en.wikipedia.org/wiki/Id_Tech Wikipedia]

这个系列来自于大名鼎鼎的 [https://en.wikipedia.org/wiki/Id_Software id Software 公司],由同样大名鼎鼎约翰·卡马克打造。

第一代诞生于1993年,是 DOS 时代的经典。

原先基于 C 和 汇编开发,从 id Tech 4 开始改用 C++ 开发。

* id Tech 1——俗称:Doom 引擎

* id Tech 2(Quake)——俗称:Quake 引擎

* id Tech 2(Quake II)——俗称:Quake II 引擎

* id Tech 3——俗称:Quake III 引擎

* id Tech 4——俗称:Doom 3 引擎

Crystal Space

Home:[http://www.crystalspace3d.org/]

Links:[https://en.wikipedia.org/wiki/Crystal_Space Wikipedia]

以 C++ 编写,功能包括:2D 和 3D 渲染、音效、AI… 它的物理引擎基于 ODE 和 Bullet

Blender Game Engine

Home:[http://www.blender.org/]

Links:[https://en.wikipedia.org/wiki/Game_Blender Wikipedia] [https://zh.wikipedia.org/wiki/Game_Blender 维基百科]

它是 [https://en.wikipedia.org/wiki/Blender_%28software%29 Blender] 的组成部分,以 C++ 编写,使用 Python 脚本扩展。功能包括:3D 渲染、碰撞检测、角色编辑器、音效、网络通讯、AI、…

Panda3D

Home:[http://www.panda3d.org/]

Links:[https://en.wikipedia.org/wiki/Panda3D Wikipedia]

以 C++ 编写,用 Python 脚本扩展。虽然它的名字有“3D”,但它不仅仅是 3D 引擎,还包括了其它功能(碰撞检测、音效、关卡编辑器…)。

== 15.2 3D 渲染引擎 ==

OGRE

Home:[http://www.ogre3d.org/]

Links:[https://en.wikipedia.org/wiki/OGRE Wikipedia] [https://zh.wikipedia.org/wiki/OGRE 维基百科]

著名的 3D 渲染引擎,C++ 开发,诞生于2005年。支持很多操作系统(包括两大手机操作系统)。很多商业游戏用到它。

支持其它编程语言(Python、Ruby、Perl)的 API 绑定。支持 JVM 和 dotNet 平台。

Mesa 3D

Home:[http://mesa3d.org/]

Links:[https://en.wikipedia.org/wiki/Mesa_%28computer_graphics%29 Wikipedia] [https://zh.wikipedia.org/wiki/Mesa_3D 维基百科]

使用 C 语言开发,它是针对 OpenGL 规范的【纯软件】实现(大部分 OpenGL 的实现都用到了显卡硬件)。

== 15.3 物理引擎 ==

Bullet

Home:[http://www.bulletphysics.org/]

Links:[https://en.wikipedia.org/wiki/Bullet_%28software%29 Wikipedia] [https://zh.wikipedia.org/wiki/Bullet 维基百科]

采用 C 和 C++ 开发。电影《2012》用到它,游戏“侠盗猎车手”、“荒野大镖客”用到它。

Box2D

Home:[http://www.box2d.org/]

Links:[https://en.wikipedia.org/wiki/Box2D Wikipedia] [https://zh.wikipedia.org/wiki/Box2D 维基百科]

基于 C++ 开发的2维物理引擎。“愤怒的小鸟”用到它。

ODE(Open Dynamics Engine)

Home:[http://www.ode.org/]

Links:[https://en.wikipedia.org/wiki/Open_Dynamics_Engine Wikipedia] [https://zh.wikipedia.org/wiki/Open_Dynamics_Engine 维基百科]

诞生于2001年,采用 C 和 C++ 开发。

Newton Game Dynamics

Home:[http://www.newtondynamics.com/]

Links:[https://en.wikipedia.org/wiki/Newton_Game_Dynamics Wikipedia]

基于 C++ 开发。

—-

= 16 数值运算 & 科学计算 =

== 16.1 综合性的库 ==

GSL(GNU Scientific Library)

Home:[https://www.gnu.org/software/gsl/]

Links:[https://en.wikipedia.org/wiki/GNU_Scientific_Library Wikipedia]

由 GNU 官方提供,包括:复数、多项式、矩阵、线性代数、特征向量、快速傅里叶变换、统计、模拟退火……

代码示例——贝塞尔函数#include
#include

double x = 5.0;
double y = gsl_sf_bessel_J0(x);
printf(“J0(%g) = %.18e\n”, x, y);

== 16.2 有理数 ==

Boost.Rational

Docs:[http://boost.org/libs/rational]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“有理数”的功能。

== 16.3 高精度数值运算 ==

GMP(GNU Multiple Precision)

Home:[https://gmplib.org/]

Links:[https://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library Wikipedia] [https://zh.wikipedia.org/wiki/GNU%E5%A4%9A%E9%87%8D%E7%B2%BE%E5%BA%A6%E8%BF%90%E7%AE%97%E5%BA%93 维基百科]

基于 C 语言的高精度数值运算库,诞生于1991年,非常老牌。

代码示例——大整数相乘#include
#include

mpz_t x,y,result;

mpz_init_set_str(x, “7612058254738945”, 10);
mpz_init_set_str(y, “9263591128439081”, 10);
mpz_init(result);

mpz_mul(result, x, y);
gmp_printf(“%Zd\n”, result);

/* free used memory */
mpz_clear(x);
mpz_clear(y);
mpz_clear(result);

Boost.Multiprecision

Docs:[http://boost.org/libs/multiprecision]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,实现了高精度数值运算。它还提供了针对 GMP 的数据类型的封装。

== 16.4 矩阵 ==

Boost.uBLAS.Matrix

Docs:[http://boost.org/libs/numeric/ublas/doc/matrix.html]

Boost 前面已经介绍过。这是 Boost 提供的矩阵模板类。

代码示例#include
#include

using namespace boost::numeric::ublas;

matrix m(3, 3);
for(unsigned i=0; i

Dlib

Docs:[http://dlib.net/linear_algebra.html#matrix]

Dlib 前面已经介绍过。它提供了一个矩阵类。

== 16.5 线性代数 ==

Boost.uBLAS

Docs:[http://boost.org/libs/numeric/ublas]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,实现了 BLAS 的1、2、3级。

代码示例——计算矩阵与矢量的乘积#include
#include
#include
#include

using namespace std;
using namespace boost::numeric::ublas;

vector v(2);
v(0) = 1; v(1) = 2;

matrix m(2,2);
m(0,0) = 0; m(0,1) = 1;
m(1,0) = 2; m(1,1) = 3;

vector v2 = prod(m, v);
cout << v2 << endl;

Blitz++

Home:[http://blitz.sourceforge.net/]

Links:[https://en.wikipedia.org/wiki/Blitz%2B%2B Wikipedia]

它是基于 C++ 实现的。其特色是:采用“模板元编程”的技术进行编译时计算,从而优化了性能。

Armadillo

Home:[http://arma.sourceforge.net/]

Links:[https://en.wikipedia.org/wiki/Armadillo_%28C%2B%2B_library%29 Wikipedia]

类似 Blitz++,Armadillo 也用了“模板元编程”的技术。

代码示例#include
#include

using namespace std;
using namespace arma;

vec v;
v << 2.0 << 5.0 << 2.0;// endr represents the end of a row in a matrixmat m;m << 1.0 << 2.0 << endr << 2.0 << 3.0 << endr << 1.0 << 3.0 << endr;cout << "Least squares solution:" << endl << solve(m,v) << endl;

Dlib

Docs:[http://dlib.net/linear_algebra.html]

Dlib 前面已经介绍过。它提供了线性代数相关的封装类。

—-

= 17 跨语言编程 =

== 17.1 整合多种语言的库 ==

SWIG

Home:[http://swig.org/]

Links:[https://en.wikipedia.org/wiki/SWIG Wikipedia]

这是一个很老牌的、有名气的工具,它可以把多种语言(Java、Python、C#、Ruby、PHP、Perl、Lua、Go ……)整合到 C/C++ 中。

整合之后,你的 C/C++ 程序就可以享受到其它这些语言的特性啦,非常爽!

== 17.2 整合单一语言的库 ==

=== 17.2.1 整合 Python 语言 ===

Boost.Python

Docs:[http://boost.org/libs/python]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,实现了 C++ 代码和 Python 代码的互操作。

代码示例——Hello world// 这是一个标准的 C 函数
const char* greet()
{
return “Hello, world”;
}

// 使用如下代码对上述函数进行包装
#include
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def(“greet”, greet);
}

// 以下是调用该模块的 Python 代码
// import hello_ext
// print(hello_ext.greet())

—-

= 18 (其它) =

一些不方便归类的,暂时放到这里。

== 18.1 词法分析 & 语法分析 ==

Boost.Spirit

Docs:[http://boost.org/libs/spirit]

Boost 前面已经介绍过。这是 Boost 的其中一个子库,提供了“基于 EBNF 的解析器框架”。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明整理好的C/C++ 开源库及示例代码
喜欢 (0)

您必须 登录 才能发表评论!

加载中……