gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:44 30 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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

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

感谢您的帮助, jack

最佳答案

C和C++编译过程如下:

  1. 预处理
  2. 编译
  3. 组装
  4. 链接

为了使用第三方库,您需要配置的步骤是预处理步骤、库 header 和链接步骤,以便程序中对库实体的引用将链接到程序中的相关代码库二进制文件。


#include 指令由预处理器处理,预处理器一次处理一个 .cpp 文件,除其他外,将那些 #include 指令替换为命名文件。为此,它必须知道从哪里获取文件,它是从“包含搜索路径”获取的。

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

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

在您的 Xcode 项目的build设置中,您会找到一个添加包含搜索路径的地方。


正如您必须将单独的目标文件链接在一起,以便在 main.cpp 中调用函数 foo() 将运行您从 foo 定义的 foo()。 cpp,你必须链接到任何你想使用的第三方库。 .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 标志,因此您不必单独添加它。

关于c++ - 将开源 C++ 代码库合并到 Xcode 5.1 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206878/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com