如何将 C++ 代码"make"到 xcode 库中
How to "make" c++ code into a library for xcode
要澄清澄清:我知道如何使用obj-c或swift在Xcode中创建库。我知道如何在项目中使用这些。我知道如何编译这些项目,以便一切正常。我不知道的是如何获取开源C源代码(呵呵(并将其构建/制作/编译到库中。
只是为了澄清以下内容:我正在寻找一种在Swift应用程序中使用c库的方法,这意味着使用Xcode。c库不必使用/在Xcode中构建,我可以使用其他工具。
我通常自己写所有我使用的代码,不幸的是,我只用Xcode写Swift。所以我在使用框架/库方面有点落后。现在我真的很想探索Tesseract OCR,但我在构建所需的库时遇到了困难。对我来说,更好的是真正了解这是如何工作的,并能够自己做到这一点,而不仅仅是在Github上查找预编译的源代码。
以下两个项目处理这一问题的方式不同。iOS版本使用预编译的库。(.a文件(OSX版本使用包含库文件(尚未编译(的项目。
iOS编译版
一个OSX编译版本
一个库的libjpeg示例,它不能只是拖放。
使用brew只会将其作为命令行工具安装,而不会生成lib。
用自制安装Tesseract
我遇到的问题是,我对这些c库知之甚少,也不知道如何构建它们,甚至可以有效地在谷歌上搜索。
我的问题:
- 如何将c代码编译/构建到.a文件中
- 如何创建一个xcode项目,该项目基于c代码?(可选(
- 这一切的正确词汇是什么
我不是在寻找Tesseract的具体答案。我想自己学习如何做到这一点。
关于静态库
本文没有提到如何实际添加c程序并让xcode生成它。不过,关于工作区的部分很有趣。
关于在Xcode 中构建c项目的文章
这一点实际上非常重要。然而,例如,我在Tesseract中找不到可执行文件。执行步骤5时,所有选项都将变灰。
这看起来很漂亮:简单的c++过程为什么tesseract不能看起来像那样?:(
如果您想构建Tesseract,请按照UNIX系统的说明进行操作:
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
您不必,事实上您不应该使用xcode(它只是一个GUI/前端(,而是坚持每个库告诉您要使用的内容。在某些情况下,可能会使用xcode进行构建。打算使用xcode进行构建的项目往往会包含一个xcode项目文件。
苹果的编译器是llvm/clang,所以它可能与Linux的GNU gcc/g++有一些细微的区别。
编辑
您需要首先安装leptonica和automake:
brew install automake
brew install leptonica
然后运行构建说明。正如您在安装过程中所注意到的,库位于中
/usr/local/lib/libtesseract.a
标题在:
/usr/local/include/tesseract
从那时起,这就是在你的项目中使用它的问题。我用brew和命令行工具在OSX Yosemite 10.10.5上测试了这一点。
这是一个大问题。就我而言,我最近遇到了Xcode。
- 如何将c代码编译/构建到.a文件中
- 单击Xcode项目名称
Yourproj
(LHS上树的根节点( - 在TARGETS部分选择目标
Yourtarget
- 单击上部栏上的"构建阶段">
- 向下滚动到"链接"部分
- 将
Mach-O Type
更改为`Static Library
根据"C"语言要求,AFAIK可以随时更改:
- 从上面的最后一点,向下滚动到Apple LLVM-语言部分
- 将
C Language Dialect
更改为您的选择,例如GNU99
- 如有必要,选择
Compile Sources As
:"C"> - 向上滚动至
Packaging
并将Product Name
编辑至Yourtarget
- 将
Executable Prefix
编辑为lib
- 将
Executable Extension
编辑为.a
现在输出应该变成类似libYourtarget.a
的文件
- 如何创建一个xcode项目来构建一个基于c代码的框架
YMMV,基于您选择的语言。我还没有用过Swift。只需添加libYourtarget.a
作为Yournewproj
的其他框架即可。正确的方法是
- 单击Xcode项目名称
Yourproj
(LHS上树的根节点( - 点击上方栏上的
Build Phases
- 确保在左侧选择了目标
- 现在展开
Link Binary with Libraries
并单击加号,然后单击Add Other
按钮 - 浏览到您的
libYourtarget.a
文件,然后单击"打开">
这应该行得通。如果没有,请尝试消除编译错误,因为这是前面提到的YMMV。
希望这能有所帮助。
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- Xcode 语义问题引用或以前定义的代码
- 使用 Xcode 将双精度存储在数组C++中
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- make 命令如何避免重新编译未更改的源文件?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- MAKE:找不到包含的用户定义的头文件?
- 'make check' GLIBC 运行时的链接问题
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- Qt - 从XCode上传到MacOS AppStore
- 在 xcode 10 上找不到 stdlibc++ 标头错误
- cmake add_custom_command + Xcode:多输出 = 多命令调用
- 在 xcode 上使用 stdlib.h
- 我可以在没有Xcode的情况下在Mac上使用带有C++的虚幻引擎吗?
- 如何将 C++ 代码"make"到 xcode 库中