Share via


在NuGet中C++常用的类库

[原文发表地址]:Find Your Favorite Library for C++ in NuGet

[原文发表时间]:2015/3/4 03:04 PM

你们中的很多人或许知道NuGet是.NET 开发的一个转向库存储器,但是对于C++开发又是怎样的呢?这儿给出的答案或许会使你感到惊讶,因为在NuGet体系中已经有很多一流的开源C++类库了。

对于那些以前还没有使用过NuGet的人来说,NuGet是微软开发平台用于管理软件包的系统。增加库包到你的Visual Studio 工程,这就跟点击一个安装按钮一样简单, 其中这些库包是从NuGet得来的。在NuGet库中最初只有.Net类库。现在我们致力于将更多的C++类库添加到NuGet生态系统之中。

让我们下面就来浏览下在NuGet 库中对于C++ 开发者而言哪些是可用的?

范畴

名字

版本 (NuGet/Latest)

详述

General Purpose

Boost

1.57/1.57

完整的Boost包(包含附属的的二进制包)。  适用于Visual C++ 2013 / 2012 / 2010 

GUI

wxWidgets     Helper

2.4.2/2.4.2

这个包是个小助手,主要在wxWidgets开发C++程序提供帮助

WTL

9.0/9.0

Windows模板库(WTL)是一个C++库,主要用于开发Windows 应用程序和UI组件

Graphics

Ogre3D

1.83/1.90

一个被广泛使用的开源三维图形渲染引擎。

DirectX     Toolkit

2015.1/2015.1

一批帮助类,主要是用于在C++中写DirectX  11.x代码

Freeglut

2.8.1/2.8.1

Free  openGL Utility Toolkit 是Mark Kilgard 开发的GLUT  的一个完全开源替代库

Glew

1.9.0/1.12.0

GLEW提供了一个高效的运行时机制,这种机制可以确认当前的目标平台支持哪些OpenGL扩展。

Glfw

3.0/3.4

GLFW是一个开源的且支持多平台的库, 主要是用OpenGL上下文来创建Window,并且管理输入和事件

Scientific

Eigen

3.2.3/3.2.4

Eigen的一个C++模板库,这种线性代数如是一个关于线性代数如矩阵、向量、数值求解和相关算法等

OpenCV

2.4.9/2.4.10

.OpenCV(开源计算机视觉库)是一个库,这个库主要是编写程序函数实现实时的计算机视觉

Multi-Media

SDL

2.0.3/2.0.3

.Simple DirectMedia  Layer 是一个通用API,在多平台之间, 它容易获取音频、键盘、鼠标和显示帧缓存

SFML

2.2/2.2

为了简化游戏和多媒体应用程序的开发,SFML可以针对你PC机的多种组建提供一个简单的接口。 针对五种模式有五个包:系统、窗口、图像、音频和网络。

CEF

3.2171/3.2171

Chromium  Embedded Framework (CEF)是一个简单的框架,主要用于在其他的应用程序中嵌入基于Chromium的浏览器

Network

OpenSSL

1.01/1.02

实现安全套接层(SSL v2/v3)协议和传输层安全协议,  并且是一种强大的而且普遍的安全套接字密码库

LibSSH2

1.4.3/1.4.3

protocol.Libssh2是一个基本客户的C函数库,用来实现SSH2协议

Poco

1.4.6/1.4.7

 一个现代的强大的开源C++类库,Poco框架主要是用于构建网络和基于因特网的应用程序,这些应用程序运行在台式电脑、服务器、移动电脑和嵌入式系统上。1.4.6是一个维修版本,包含多个包。

C++ Rest SDK

2.4.0.1/2.4.0.1

一个跨平台的库,支持写入基于云的客户端/服务器通信的异步C++  API设计的代码

Azure Storage Client for C++

0.5.0/0.5.0

这个客户端主要处理Microsoft  Azure s存储服务, 这包含存储数据二进制和文本数据的Blob服务、存储结构体和非关系数据的表服务以及存储可能被客户读取的信息的队列表服务

Libcurl     (cURL)

7.30/7.40

Curl是一种工具,而libcurl却是一个库,这个库是用URL句法来传输数据,它支持DICT,  FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S,  RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP等许多功能

Database

SQLite

3.8.4.2/3.8.7.2

SQLite是一个实时处理库,它是零配置、零管理以及传输SQL数据库引擎

SOCI

3.2.0/3.2.2

SOCI为C++程序员提供了一种用自然和直观的方法去获取多个SQL数据库

Utility

ZLib

1.2.8/1.2.8

一个大规模而且精准的压缩函式库

LibXML2

2.7.8/2.9.2

Libxml2是C语言写成的用来解析XML的工具包,并且能在多个平台能被多种语言所调用

TinyXML2

2.1/2.2

TinyXML-2是用C++ 语言实现的一个简易、轻量、有效的XML解析器,它可以很容易地集成到其他的程序中

JsonC++

0.6/0.6

解析JSON文件的C++库

PThread

2.9.1/2.9.1

用POSIX  线程来写多线程应用程序的WIN32库包

Codec

LibJpeg

9.0/9.0

这是一个用C语言编写的库,包含了一个被广泛使用JPEG图像编码、解码和转码

LibPng

1.5.10/1.6.16

LibPng是一个官方PNG的引用库

 

看到这些熟悉的库,你没有想去试一下的想法呢?那就去试吧,但是请记住:为了让它们中的多数工作,你可能需要安装Visual Studio 2013(或者Express版本).如果你常用的库不在上面的列表里,请不要难过,因为我们仅仅列举了C++ Package中的一小部分,而绝大部分可以在官方库中找到,然而如果你认为在官方库或者上表中列举的软件包中缺失了那些比较重要的C++类库或者有些类库有错误而不能工作,请你在这篇博客后面进行说明。

C++ 中使用NuGet

安装一个来自于的NuGet的C++ 的软件包与安装来自于.NET的软件包是一样的。如果你知道软件包的名字或者可以用 “Manage NuGet Package”(图2所示)来安装。 你可以在NuGet控制台中通过输入“Install-Package [package
name]”来安装,这些可以在你的工程环境菜单下打开(图1所示)

                                                                                               图2

 

所有的工程依赖项,包括自动添加到你的vcxproj工程文件中的路径和库路径。只有在很少的情况下,为了让你的程序运行一些软件包,你或许需要手动去拷贝一些动态链接库(DLLs) 到你的二进制文件夹中。

值得注意的是,NuGet关于C++仍然有一些限制。你会发现在搜索结果中区分C++软件包和.Net软件包是挺困难的。在你的搜索栏中添加标签“tags:native”来过滤结,这可以让你得到更多准确的结果。另外一件值得注意的是,你需要明白这个package是否具有兼容性,因为绝大多数的NuGet包标注在Visual Studio中的一个特定的版本中没而不是每一个软件包都支持所有的处理器结构。

我们一直在倾听

我们希望NuGet 软件包系统在Windows C++ 方面可以带给你最好的库部署感受。目前我们正在考虑添加更多地C++库和功能到NuGet,因此,您的反馈是至关重要的。