如何为 iOS 构建 DLIB
Posted
技术标签:
【中文标题】如何为 iOS 构建 DLIB【英文标题】:how to build DLIB for iOS 【发布时间】:2016-04-08 01:43:23 【问题描述】:我正在尝试为 ios 项目构建 DLIB。运行cmake
会产生libdlib.a
和.o
文件的加载。
当我将库添加到 Xcode 项目时,我收到警告说该库尚未为 arm64
构建。
我的问题分为两部分:
-
(我尝试了
cmake **path_to_source** -DCMAKE_OSX_ARCHITECTURE="arm64"
,但它导致了大量错误,例如 unknown type name '__uint32_t'; did you mean '__uint128_t'
)?
运行 cmake 时生成的所有 .o
文件的目的是什么?我需要将它们包含在 Xcode 项目中吗?
【问题讨论】:
对象文件 (*.o) 只是构建的副产品。由此产生的libdlib.a
是您可能想要使用的静态库。你的 Xcode 版本是多少?
我使用的是最新版本 7.2
我的源是 linux/OSX,所以我不确定是否可以为 iOS 构建?
是的,就是this is the website。示例文件夹中有大量生成文件。 This is the compilation instructions
谢谢@ruslo,我会去看看。
【参考方案1】:
Rob Sanders 和 mylogon 已经展示了如何为 ios 构建 dlib,这里是如何使用它:
-
将 libdlib.a 添加到项目中,并将路径添加到库搜索路径
将所有源添加到包含目录(不要添加到项目中),并将路径添加到标题搜索路径。
添加包含 blas 符号的加速框架。
从构建设置中添加预处理器宏,“自定义编译器标志”/“其他 c 标志”。这些宏确保头文件与库匹配。
-DDLIB_JPEG_SUPPORT
-DDLIB_NO_GUI_SUPPORT
-DNDEBUG
-DDLIB_USE_BLAS
-DDLIB_USE_LAPACK
【讨论】:
【参考方案2】:为了补充 RASS 的回答,我附上了屏幕截图,展示了如何在 iOS 和 OSX 库之间进行更改
打开项目后,
-
从项目导航器中选择项目文件
从底部一直选择 dlib 目标
选择“构建设置”
展开“基础 SDK”下拉菜单
-
选择 iOS 或 macOS (OSX)
我希望这可以帮助一些人! GL
【讨论】:
【参考方案3】:我终于想通了:
X11(在 Mac 上,您只需打开 X11 应用程序,如果未安装 X11,它将带您下载)。 Xcode cmake(你可以使用自制)要求
在终端中将步骤
lib-xx.xx/examples
设为您的根目录
运行:
mkdir build
cd build
cmake -G Xcode ..
cmake --build . --config Release
这将创建一个名为 dlib_build
的文件夹,您可以在其中找到编译库的 Xcode 项目。在该 Xcode 项目的构建设置中,您可以为您喜欢的任何 Xcode 支持的操作系统设置构建架构和 SDK!
编辑:
您必须包含许多自定义编译器标志和 3rd 方库才能使 dlib 在项目中工作。查看examples.xcproject
构建设置。
【讨论】:
我完全按照你说的做了,但它给了我一个仅在 Mac(OSX) 上兼容的 xCode 项目。我错过了什么吗? 是的,您所要做的就是进入构建设置并更改支持的平台。 @RASS 嗨!我还尝试使用 dlib 库为 iOS 构建我的 XCode 应用程序,但由于架构类型(例如ld: building for iOS simulator, but linking against dylib built for OSX, file '/opt/X11/lib/libICE.dylib' for architecture x86_64
),我遇到了很多问题。您是否在 dlib 构建阶段或 XCode 应用构建阶段使用了一些架构标志?
@don-prog 您可以在 Xcode 构建设置中的 dlib 构建阶段更改活动架构。默认设置为 OS X,但您可以将其更改为 iOS 或模拟器。
@RASS 你用 iOS 工具链为 iOS 构建 dlib 了吗?我问这个是因为我有some problems with this。如果你能给我一些关于 iOS 的 dlib 构建阶段的特别建议,那将是非常好的。也许我什至不需要使用 iOS 工具链或其他东西?以上是关于如何为 iOS 构建 DLIB的主要内容,如果未能解决你的问题,请参考以下文章
如何为使用 Xamarin 构建的 iOS 应用启用堆栈粉碎保护?