【问题标题】:How to "make" c++ code into a library for xcode如何将 C++ 代码“制作”成 xcode 的库
【发布时间】:2015-12-25 01:50:04
【问题描述】:

为了澄清澄清: 我知道如何使用 obj-c 或 swift 在 Xcode 中创建库。我知道如何在项目中使用这些。我知道如何编译这些项目,所以一切正常。我不知道的是如何获取开源C源代码(呵呵)并将其构建/制作/编译成库。


只是为了澄清以下所有内容: 我正在寻找一种在 Swift 应用程序中使用 c 库的方法,这意味着使用 Xcode。 c 库不必使用/在 Xcode 中构建,我可以使用其他工具。


我通常编写自己使用的所有代码,不幸的是我只在 Xcode 中编写 Swift。所以我在使用框架/库方面有点落后。 现在我真的很想探索 Tesseract OCR,但我在构建所需的库时遇到了麻烦。对我来说,最好是真正了解它是如何工作的,并且自己能够做到这一点,而不仅仅是查看 Github 并找到预编译的源代码。

下面的项目都以不同的方式处理这个问题。 iOS 版本使用预编译的库。 (.a 文件)OSX 版本使用包含库文件(尚未编译)的项目。

An iOS compiled version

An OSX compiled version

libjpeg 不能只是拖放的库示例。

使用 brew 只会将其安装为命令行工具,不会生成 lib。

install Tesseract with homebrew

我的问题是我对这些 c 库以及如何构建它们甚至可以有效地在谷歌上搜索的了解太少。

我的问题:

  • 如何将 c 代码编译/构建到 .a 文件中?
  • 如何创建一个基于 c代码? (可选)
  • 什么是这一切的正确词汇?

我不是在寻找特定于 Tesseract 的答案。我想自己学习如何做到这一点。

about static libraries

本文没有提到如何实际添加 c 程序并让 xcode 制作。不过,关于工作区的部分很有趣。

Article on building c project in Xcode

这个真的很相关。但是,例如,我在 Tesseract 中找不到可执行文件。执行第 5 步时,所有选项均显示为灰色。

这看起来很漂亮:simple c++ procect 为什么 tesseract 不能像那样? :)

【问题讨论】:

  • 正确的术语是“静态链接库”。对“xcode 构建静态链接库”进行网络搜索,您应该会找到一个不错的教程。可能在 SO。
  • 我以前试过。所有文章都是关于将 xcode 项目构建为库/框架。不是关于如何构建像链接的 libjpeg 这样的 c“项目”。

标签: c++ xcode frameworks static-libraries


【解决方案1】:

如果您想构建 Tesseract,请按照 UNIX 系统的说明进行操作:

./autogen.sh
./configure
make
sudo make install
sudo ldconfig

您不必这样做,实际上您不应该使用 xcode(它只是一个 GUI/前端),而是坚持每个库告诉您使用的内容。在某些情况下,可能可以使用 xcode 构建。 打算让您使用 xcode 进行构建的项目往往包含一个 xcode 项目文件。

Apple 的编译器是 llvm/clang,所以它可能与 Linux 的 GNU gcc/g++ 有一些细微差别。

编辑

你需要先安装 leptonica 和 automake:

brew install automake
brew install leptonica

然后运行构建指令。 正如您将在 make install 期间注意到的那样,该库位于

/usr/local/lib/libtesseract.a

标题在:

/usr/local/include/tesseract

从那里开始,在您的项目中使用它。 我使用 brew 和命令行工具在 OSX Yosemite 10.10.5 上对此进行了测试。

【讨论】:

  • 抱歉错过了更新。现在测试! -> 工作如此之快,我仍然可以编辑评论。这个答案就是这么简单。谢谢!如果我错了,请纠正我,但是像这样构建的其他库也会在上面找到的位置生成一个 .a 文件和头文件吗?
  • 大多数 Unix/Linux 库倾向于使用这些位置(或 /usr/lib 和 /usr/include),但 OSX 往往略有不同。
【解决方案2】:

这是一个大问题。就部分而言,我最近遇到了 Xcode。

  • 如何将 c 代码编译/构建到 .a 文件中?
  1. 点击Xcode项目名称Yourproj(LHS上树的根节点)
  2. 在 TARGETS 部分选择目标 Yourtarget
  3. 点击上方栏中的构建阶段
  4. 向下滚动到链接部分
  5. Mach-O Type 更改为`静态库

根据“C”语言要求,AFAIK 可以随时更改:

  1. 从上面的最后一点,向下滚动到 Apple LLVM - 语言部分
  2. C Language Dialect 更改为您的选择,例如GNU99
  3. 必要时选择Compile Sources As: 'C'
  4. 向上滚动至Packaging 并将Product Name 编辑为Yourtarget
  5. Executable Prefix 编辑为lib
  6. Executable Extension 编辑为.a

现在输出应该变成像libYourtarget.a这样的文件

  • 如何创建基于 c 代码构建框架的 xcode 项目?

YMMV,取决于您选择的语言。我还没有使用 Swift。只需将libYourtarget.a 添加为Yournewproj 的其他框架即可。这样做的正确方法是

  1. 点击Xcode项目名称Yourproj(LHS上树的根节点)
  2. 点击上方栏的Build Phases
  3. 确保选择了左侧的目标
  4. 现在展开 Link Binary with Libraries 并点击加号,然后点击 Add Other 按钮
  5. 浏览到您的libYourtarget.a 文件并点击打开。

这应该可行。如果没有,请尝试摆脱编译错误,因为它是 YMMV,如前所述。

希望这会有所帮助。

【讨论】:

  • 感谢您抽出宝贵时间并在您的回答中使用 Xcode。现在没有时间测试它。今晚将使用随机开源库对此进行测试!
  • @RMenke 太好了!如果您需要任何帮助,请告诉我。
  • 其实我有。这一切真的很迟钝。我是否只是将 Tesseract 源文件拖放到一个空的 Xcode 项目中,然后像您的答案一样进行设置?我是否还需要将标题设置为公开?仅以 Tesseract 为例。最不具体的答案对我的帮助最大。
  • @RMenke 对于静态库,您应该“复制文件”以将目录包含在“产品目录”中,而不是其他发布标头的方式。
  • 顺便说一句,图书馆很有趣,我花了一些时间在上面。你可以在这里找到一个肮脏的黑客:LeptonicaTesseract。希望这是您正在寻找的。 @RMenke 你打算用它们做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 2020-12-12
相关资源
最近更新 更多