将开源C ++代码库合并到Xcode 5.1中

时间:2014-08-08 15:23:19

标签: c++ xcode open-source

我是Xcode编程的新手,我希望能够在未来的c ++项目中使用开源代码(例如机器学习/计算机视觉库)。另外,除了标准库之外,我从未真正理解链接和使用任何c ++库所涉及的过程,我希望有人可以概述这个过程或指出我正确的方向。

我非常感谢从第三方源代码下载开始的一些帮助。我一直在寻找这个过程中的点点滴滴,但是没有一个帖子似乎专门针对我的问题,所以如果我已经做错了,请告诉我。

我开始下载dlib库。我找到了cmake的源代码,我点击了configure并生成而没有更改任何选项,这给了我一个Xcode项目。然后我构建了运行项目,这在相关的调试文件夹中生成了文件libdlib.a。然后我将文件拖到带有二进制库的链接中。我的档案文件现在位于项目中,但我不知道该怎么做。

  1. 如何通过include函数让Xcode识别出来? 例如#include< dlib> ,#include< dlib / matrix.h> ,使用命名空间dlib

  2. 我需要采取哪些其他步骤才能使用图书馆定义的功能/对象?

  3. 我是否需要在项目中包含档案文件以外的任何源代码?

  4. 对于我下载的任何库,此过程是否大致相同,还是需要针对每个库进行专门定制?

  5. 我应该在计算机上放置这些库的特定位置吗?或者我只是需要在Xcode中识别他们的位置?

  6. 完成此过程后,Xcode会“知道”库中的所有相关功能吗?   例如如果我开始输入,是否会填写名称的其余部分,或者通知您每个功能的必要参数?

  7. 感谢您的帮助, 杰克

1 个答案:

答案 0 :(得分:1)

C和C ++构建过程如下:

  1. 预处理
  2. 汇编
  3. 组件
  4. 为了使用第三方库,您需要配置的步骤是预处理步骤,库标题和链接步骤,以便程序中对库实体的引用将链接到相关代码中。图书馆二进制文件。


    #include指令由预处理器处理,预处理器一次处理一个.cpp文件,其中包括用命名文件的内容替换那些#include指令。要做到这一点,它必须知道从哪里获取文件,它来自“包含搜索路径”。

    为您预先配置了一些搜索路径,例如标准库的搜索路径。对于任何其他标头,您必须添加适当的搜索路径。在命令行中,这通常使用带有参数的-I标志。

    clang -E -I /path/to/wherever/you/put/the/library/headers main.cpp
    

    在Xcode项目的构建设置中,您将找到一个要添加的地方,包括搜索路径。


    正如您必须将单独的目标文件链接在一起,以便在main.cpp中调用函数foo()将从foo.cpp运行您的foo()定义,您必须链接到任何第三方您想要使用的库。 .a文件是一个库归档文件,它只是一堆.o文件。链接器知道如何处理这个,所以你不需要解包任何东西,你只需要告诉链接器链接你的可执行文件中的.a文件。

    有多种方法可以做到这一点,但最常见的是将库搜索路径设置为包含.a所在的目录,并告诉链接器查找具有特定名称的库。设置库搜索路径使用-L标志,只要.a文件遵循通常的命名约定(libXXX.a),然后告诉链接器搜索并使用带有标志-lXXX的库。

    clang -L /path/to/libraries -ldlib main.o foo.o bar.o
    

    您也可以像其他目标文件一样传递库:

    clang main.o foo.o bar.o /path/to/libraries/libdlib.a
    

    在您的Xcode项目设置中,还有一个库搜索路径条目。将.a文件添加到“带有二进制库的链接”区域应该会导致正确添加-l标志,因此您不必单独添加它。