在OS X上安装C++库

47

我正在努力理解一些基本概念,但似乎无法弄清楚。

我真的很困惑关于为C++安装(我认为它们称为库)的含义。我正在尝试安装OpenCV,但我不知道需要发生什么才能安装它,如何检查,或者OpenCV到底是什么(它是一个库、框架还是其他东西?)。

我的理解是OpenCV(以及其他库/框架)只分发源代码,因此可以跨平台工作。然后,在下载后,您必须构建它(不过,我不知道“构建”意味着什么),然后将您的编译器链接到它上面,以便可以访问文件?我不知道如何完成这个过程,或者这实际上意味着什么。我认为很多工作都是由CMake完成的,但我不知道CMake实际上是做什么的,您该如何使用它,或者如何在代码中使用库/框架。另外,像OpenCV这样的库应该安装在哪里,clang(或任何其他编译器/链接器)应该如何知道在哪里找到它们,以及它们可能是哪些类型的文件(.a,.dylib,.cpp,.hpp,可执行文件或集合的所有东西)?这种结构是特定于C++和OS X还是更为普遍?

我不是在寻找有关如何安装OpenCV或其他库的教程,而是想学习它的实际工作原理,以便将来不需要教程。


2
您的问题涉及到很多方面:您需要学习如何编译和连接C++代码、如何在C++中使用第三方库以及构建工具(如cmake)。这些概念与实现或平台无关,适用于所有的C++编程。使用像XCode、Eclipse-CDT或Visual Studio这样的IDE可以掩盖很多底层细节(您只需在GUI中配置一些设置,然后工具便会完成其余工作),但是由于不了解您的C++熟练程度,因此很难回答您广泛的问题。 - wkl
我建议您先在您要使用OpenCV的语言和计划使用的平台上编写一个简单的“Hello World”应用程序。接下来了解它是如何工作的细节。为了澄清这个神秘的问题,您必须知道的主要事情是:程序是由单独的部分编译而成的。通过“链接”的过程将单个部分合并为应用程序。使用像OpenCV这样的东西需要将您程序的部分与其他人制作的部分(如OpenCV)链接在一起。 - john elemans
感谢您的快速响应。过去我已经成功地使用了C++的第三方库,但是我并不知道"引擎盖下"发生了什么,因为像pkg-config这样的工具为我完成了这些困难的任务。我从未使用过C++的IDE,因为对我来说,使用文本编辑器并学习IDE正在做什么似乎比使用IDE更容易入门。到目前为止,我遇到的最大问题是,所有的资源都没有讨论低级别的内容,因此我不知道如何将简单的hello world程序扩展到更大、更有用的程序。 - Giesbrecht
这个链接可能不会帮助你理解,但如果你能跟着教程走,它可能会让你在Mac上使用OpenCV。 - GPPK
1
我以前看过教程,但是不知道下面在发生什么,所以不确定那会有多大帮助。 - Giesbrecht
1个回答

92

在Mac上进行C/C++开发之前,您需要前往应用商店免费下载苹果的IDE - 集成开发环境Xcode。没有Xcode,您将没有编译器(即clang或gcc或g ++)和构建工具(即make)。

安装Xcode

如果您是完全新手,请打开应用商店:

enter image description here

然后下载并安装Xcode,它看起来像这样:

enter image description here

安装命令行工具

接下来,您必须安装Xcode的命令行工具,因此启动终端-通过按下⌘+空格并开始输入终端,当它猜测正确时,只需按Enter/Return键。复制并粘贴以下内容到终端中,然后按Enter/Return键。

xcode-select --install

上述内容称为"聚光灯搜索",是在Mac上查找任何东西最简单的方法。

安装homebrew

接下来,如果您想在Mac上安装OpenCV,可以安装类似homebrew这样的软件包管理器,只需从homebrew网站复制并粘贴一行代码到终端即可。我不会在此处显示该行代码,以防它在几年后发生更改并且有人查看此文本,但如果您转到上面的链接,很容易找到。

查找软件包

然后,您可以使用以下命令查找任何要安装的软件包:

brew search opencv    # Look for packages called "opencv"
或。
brew search boost     # Look for "boost" libraries

安装OpenCV

因此,对于OpenCV的标准(没有特殊选项)安装和构建,请执行以下操作:

brew install opencv

移除软件包

您可以使用以下命令来移除不再需要的软件包:

brew rm opencv

更新软件包

您也可以使用以下命令更新所有已安装的软件包:

brew update && brew upgrade && brew cleanup

构建项目

一旦您已经安装完成,您就可以开始编译和构建自己的项目。如果您使用pkg-config软件包来获取所需的编译器/链接器设置,那么会很有帮助,因此我建议:

brew install pkg-config

现在你可以使用一个非常简单的命令进行编译和链接,例如:

g++ $(pkg-config --cflags --libs opencv) process.cpp -o process

如果您已经开始进行基本编译,那么您随后可能会想使用 Xcode IDE 来编辑程序。为了做到这一点,您必须告诉 Xcode 头文件和库的位置以及要链接哪些库。这将因您使用的 OpenCV 版本而异,但您需要修改下面两个图中标记的位置。您可以按顺序轻松地找到它们 - 首先是绿色区域,然后是黄色区域,接着是蓝色区域,最后是红色区域。

enter image description here

enter image description here

需要在 Xcode 设置区域中输入的实际信息可以通过运行我在上一节中建议的相同 pkg-config 命令来找到。因此,请运行:

然后,如果您想要,您可以随后使用 Xcode IDE 进行编辑。

pkg-config --cflags opencv

获取头文件(包含文件)的位置,然后运行。

pkg-config --libs opencv

您需要填写链接器所需的信息才能在Xcode中获取所需信息。


感谢指南。我一定会尝试使用Xcode作为IDE。我以前用过它,但只是作为文本编辑器,因为我希望从头开始学习代码的构建方式,但也许这并不实际。我真正想要的是关于安装过程如何工作以及像opencv这样的软件包实际上是什么(是库、框架还是其他什么东西?)的信息。 - Giesbrecht
你好,非常详细的回答,谢谢。请问您能告诉我为什么使用 pkg-config --cflags opencv 和 pkg-config --libs opencv 不能为 FFMPEG 库工作吗? - cmario
pkg-config ... opencv 会告诉你构建 opencv 包的标志/设置。如果你想构建不同的包,比如 ffmpeg,你需要找到该包(可能通过使用 pkg-config --list-all),然后当你找到所需的包名(例如 ffmpeg)时,你可以使用 pkg-config --cflags --libs ffmpeg 或类似命令。 - Mark Setchell
7
希望我5年前就看到了这个。非常好的介绍。 - Ross
@Fattie 我认为“框架搜索路径”主要是针对像Cocoa和Accelerate这样的大型Apple提供的软件包,而不是我在这里提到的开源软件包... - Mark Setchell
显示剩余6条评论

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