在OS X上安装C ++库

时间:2015-12-17 17:20:31

标签: c++ macos opencv installation libraries

我试图了解一些基本概念,但我似乎无法弄明白。

我真的很担心C ++的安装意味着什么(我认为它们被称为库)。我正在尝试安装OpenCV,但我不知道安装它需要做什么,如何检查,或者真正的OpenCV是什么(它是一个库,框架,还有什么?)。

我的理解是OpenCV(和其他库/框架)仅作为源代码分发,因此可以跨平台工作。然后,在你下载它之后,你必须构建它(我不知道构建的意思),然后将你的编译器链接到它,以便它可以访问文件?我不知道如何做到这一点,或者真的意味着什么。我认为很多这都是由CMake完成的,但我不知道CMake到底做了什么,如何使用它,或者如何在代码中使用库/框架。此外,如何安装OpenCV这样的库,clang(或任何其他编译器/链接器)如何知道在哪里找到它们,以及它们将是什么类型的文件(.a,.dylib,.cpp,.hpp,可执行文件) ,或一切的集合)?这种结构是否特定于C ++和OS X,还是更广泛?

我不是在寻找有关如何安装OpenCV或其他库的教程,但我正在尝试学习它是如何工作的,所以我将来不需要教程。

1 个答案:

答案 0 :(得分:58)

在Mac上进行任何C / C ++开发工作之前,您需要前往App Store并免费下载Xcode - 它是Apple的IDE - 集成开发环境。如果没有Xcode,您将没有编译器(即clanggccg++)且没有构建工具(即make)。

安装Xcode

如果您是Mac新手,App Store看起来像这样:

enter image description here

Xcode看起来像这样:

enter image description here

安装命令行工具

接下来你必须安装Xcode的命令行工具,所以启动终端 - 按 + SPACE 并开始输入Terminal当它猜对了,只需点击 Enter / Return 。将以下内容复制并粘贴到终端,然后按 Enter / Return

xcode-select --install

以上称为" Spotlight Search" ,是在Mac上查找任何内容的最简单方法。

安装自制程序

然后,如果您要在Mac上安装OpenCV,请安装一个包管理器,例如homebrew,这是将homebrew website中的一行复制并粘贴到您的终奌站。我不会在这里显示这条线,以防它发生变化,有人在几年内看到这个,但很容易看出你是否转到上面的链接。

查找套餐

然后你可以找到你想要的任何包:

brew search opencv    # Look for packages called "opencv"

brew search boost     # Look for "boost" libraries

安装OpenCV

所以,对于一个vanilla(没有特殊选项)安装和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构建

一旦开始使用基本编译,您可能希望开始使用Xcode来编辑程序,为此,您必须告诉Xcode头文件所在的位置以及库的位置是和哪些库链接。这将因您的OpenCV版本而异,但您需要更改下面两个图中标记的位置。如果按顺序点击它们,你会很容易找到它们 - 首先是绿色区域,然后是黄色,然后是蓝色,然后是红色。

enter image description here

enter image description here

通过运行我在上一节中建议的pkg-config命令,可以找到上面标记的Xcode设置区域中需要的实际信息。所以跑:

pkg-config --cflags opencv

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

pkg-config --libs opencv

获取填写Xcode中链接器所需的信息。