如何使用C++库?

4
我是一名Python开发者,大学以来就没有使用过C ++。 我主要使用Python进行科学编程。 我想尝试C ++,看看它在性能方面是否更好。
我在C ++方面还很新。 我找到了dlib库,因为它具有许多有趣的功能,所以似乎是一个不错的库。 但是当我下载它时,我发现有几个文件夹里面都是.h和.cpp文件。
在Python中,我会使用pip或其他工具安装所需的库,然后使用import在我的项目中使用它。
c++库是否有类似的安装方式? 还是我必须查找所有这些.h和.cpp文件,然后决定我需要哪些文件,并将它们复制到我的项目中? 或者我该如何使用dlib库?
我在Google上搜索了很多,但我找不到任何关于如何使用c++库或安装新软件包以供使用的指示。
如果有影响的话,我使用Visual Studio Community 2017和Windows 10。
4个回答

5
要集成一个库,你需要两种东西:
- 声明所需的头文件(通常是*.h文件),让编译器了解库中的功能(有点类似于导入语句); - 包含预编译可执行代码的已编译库文件(通常是*.lib文件),以便链接器组装最终的可执行文件。
在某些情况下(特别是对于模板代码),库只能由头文件制成。在其他情况下,包没有包含现成的库文件,您必须自己构建它或手动将源文件(*.c/cpp)包含在项目中。
更不用说您可能需要调整的无数可选设置,以符合生成代码的具体要求,例如函数调用约定、结构对齐等等……
最后但并非最不重要的一点是,有些库仅在运行时连接。它们被称为动态链接库,并涉及不同的过程。
所有这些对于初学者来说都相对复杂,几乎就像黑魔法一样。如果您非常幸运,您会找到一些库文档告诉您应该使用哪些选项来进行编译。如果可以的话,从一个现有的工作示例项目开始!

关于dlib,查看http://dlib.net/compile.html

当你将其与Python模块的易用性进行比较时,请准备好接受文化上的冲击。


3
这是一个比较广泛的问题,但我会尽力回答。首先,在C++中,库由头文件和预编译部分组成(在Windows上为.lib、.dll,在Linux上为.a、.so)。要在项目中使用它们,您需要告知程序(和编译器)该库具有的功能(通过#include其头文件),并链接器来包含该库二进制文件。pip是软件包管理器,可以自动下载、构建和安装您系统中想要的库。目前,在C++中没有这样的单一工具,必须手动完成这些步骤。通常情况下,您需要使用git或下载源代码zip存档(在此处执行)。一旦您获得了源代码,就必须构建它。
为了实现多平台性,库通常不会附带具体的构建系统描述(如Windows上的Visual Studio项目或Linux上的makefile等),而是使用更通用的工具CMake进行创建和抽象。例如,dlib就是这样做的。通过使用CMake(对于初学者,我建议使用与Windows一起安装的CMake-GUI)可以生成Visual Studio项目,稍后可以打开并编译以生成.lib文件。如何执行此操作,请参考dlib编译说明。
一旦您在磁盘上拥有库和头文件,就可以将头文件和.lib添加到Visual项目中,并像使用其他C++库一样使用它们。(看起来有点老,但应该能用

{btsdaf} - Mihai Andrei
{btsdaf} - R2RT

1
据我所知,对于C++来说没有类似于pip的工具。您需要根据您的工作环境和相应的库来进行操作。
例如,在dlib的情况下,项目主页上有适用于Visual Studio的说明。基本上,它涉及通过将一个单一源文件复制到项目中并设置包含路径来编译整个库以及您自己的项目。
来自http://dlib.net/compile.html
在Windows上使用Visual Studio 2015或更新版本进行编译,您只需要创建一个空的控制台项目。然后将dlib/all/source.cpp添加到其中,并将包含dlib文件夹的文件夹添加到#include搜索路径中。然后,您可以通过将示例程序添加到项目中来编译任何示例程序。
再次注意,如果要使用jpeg和png文件,则只能在链接libjpeg和libpng时才能使用dlib。在Visual Studio中,最简单的方法是将dlib/external文件夹中的所有libjpeg、libpng和zlib源文件添加到您的项目中,并定义DLIB_PNG_SUPPORT和DLIB_JPEG_SUPPORT预处理器指令。如果您不知道如何配置Visual Studio,则应像上面所示使用CMake,因为它会自动处理所有内容。

0

你需要下载它们,将它们放在你的项目目录中,然后以几乎与在Python中相同的方式包含它们。你只需要包含.h文件。

例如test.h:

#include "test.h"

希望这能帮到你!


3
然后这位发帖者有一个关于一堆链接器错误的后续问题。不像你所描述的那么简单。 - StoryTeller - Unslander Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接