为 iOS 项目编译 libtiff 以包含 64 位架构

Posted

技术标签:

【中文标题】为 iOS 项目编译 libtiff 以包含 64 位架构【英文标题】:Compile libtiff for iOS project to include 64bit architecture 【发布时间】:2015-05-30 22:42:10 【问题描述】:

我有一个更新到最新 SDK8.3 的 ios 应用程序,并且我使用的是最新版本的 Xcode。我的应用程序使用 libtiff 将图像(PNG 格式)转换为 TIFF 格式。我遇到的问题是我需要向 App Store 提交一个新版本,并且需要合并 64 位架构。我项目中的 libtiff 库很旧,我必须更新到最新版本。

我已经从官方下载站点 (ftp.remotesensing.org) 下载了 libtiff 4.0.3,但我无法为所需的架构构建它,我收到错误消息。我已经阅读了this post,但它有点过时了,我认为与 Xcode 5 或 Xcode 4 相比,Apple 更改了 Xcode 6 中的工具链。

我不是 gcc / llvm 工具链方面的专家,在这里我有点迷失了。我只需要我的 Xcode 项目中的 tiff 库并成功编译它。我尝试自己构建库,但它只为 OS X 构建,我需要 iOS。

iOS 中有关 TIFF 的文档很少,我更喜欢使用 PNG,但出于商业原因,我需要使用 TIFF。有没有人成功地将 libtiff 编译成一个胖二进制文件以包含 5 个必需的架构(i386、x86_64、arm64、armv7、armv7s)?

我只需要tiff转换但没有jpg压缩,所以我猜我不需要jpeg库。

【问题讨论】:

【参考方案1】:

我也遇到过类似的问题,但幸运的是我发现了这个Github project。只需按照说明构建库即可。首先构建libjpg,因为是liftiff的依赖。

使用终端进入下载项目的文件夹,在我的例子中是liftiff-ios-master,并运行这两个脚本,并按此顺序。

./build-jpg.sh
./build-tiff.sh

liftiff-ios-master/dependencies 文件夹中完成后,您会发现两个文件夹,includelib,其中包含所有必要的文件。

在 Xcode 中只需将以下文件复制到您的项目中(这些只是libtiff 的必要文件,除非您需要 jpeg 压缩支持,否则无需复制 jpeg 库文件):

并确认liftiff.a 已添加到目标中Build Phases 选项卡的Link Binary With Libraries 部分。

在您的 .h 或 .m 文件中只需包含以下内容:

#import <tiffio.h>

编译并运行。确保您的Build Settings 的设置Architectures 设置为Standard architectures (armv7, arm64)

要验证liftiff.a 在其文件夹中和终端使用中是否具有所有所需的架构:

$ file libtiff.a
libtiff.a: Mach-O universal binary with 5 architectures
libtiff.a (for architecture armv7):     current ar archive random library
libtiff.a (for architecture armv7s):    current ar archive random library
libtiff.a (for architecture i386):      current ar archive random library
libtiff.a (for architecture x86_64):    current ar archive random library
libtiff.a (for architecture arm64):     current ar archive random library

【讨论】:

以上是关于为 iOS 项目编译 libtiff 以包含 64 位架构的主要内容,如果未能解决你的问题,请参考以下文章

/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference toTIFFIsTiled@LIBTIFF_4.0&

OpenCV iOS 和 64 位架构

在Window下编译LibGeotiff(含Libtiff)

centos下载安装libgcc 和 libtiff

libtiff的使用

仅在重建时运行预构建事件