【问题标题】:Incorporate Open Source C++ Code Libraries into Xcode 5.1将开源 C++ 代码库合并到 Xcode 5.1
【发布时间】:2014-08-08 15:23:18
【问题描述】:

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

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

我首先下载了 dlib 库。我用 cmake 找到了源代码,我点击了配置和生成而不更改任何选项,这给了我一个 Xcode 项目。然后我构建了要运行的项目,并在相关的调试文件夹中生成了文件 libdlib.a。然后我将文件拖到带有二进制库的链接中。我的存档文件现在位于项目中,但我不确定从这里做什么。

  1. 如何让 Xcode 使用 include 函数识别它? 例如#include ,#include,使用命名空间dlib

  2. 我还需要采取哪些其他步骤才能使用库定义的函数/对象?

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

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

  5. 计算机上是否有我应该放置这些库的特定位置?还是我只需要确定他们在 Xcode 中的位置?

  6. 遵循这个过程后,Xcode 会“知道”库中的所有相关函数吗? 例如如果我开始输入,它会填写名称的其余部分,还是通知您每个函数的必要参数?

感谢您的帮助, 杰克

【问题讨论】:

    标签: c++ xcode open-source


    【解决方案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 标志,因此您不必单独添加它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多