ld: library not found for -lcrt1.3.1.o error while 运行 app in device with xcode 8.0 with iOS10

ld: library not found for -lcrt1.3.1.o error while running app in device with xcode 8.0 with iOS10

将 xcode 升级到 8.0 后,我的应用程序项目针对设备目标构建时出错,但针对模拟器构建成功。

错误如下:
ld: 找不到 -lcrt1.3 的库。1.o

这个错误的解决方法是什么。

花了很多时间,我终于找到了这个错误的原因。

错误: ld:找不到 -lcrt1.3 的库。1.o

解法: 如果您的项目源具有来自 iOS 5.0 的部署目标,则将其更改为 iOS 6.0 或更高版本 ,您的错误将得到修复。现在也适用于设备。

欢呼!!!

crt1.3.1.o 是包含在较旧的 iOSes(以及它们的 SDK)中但不再出现在较新的 SDK 中的库。但是,当项目的部署目标设置为较旧的 iOS(<6.0,正如@Sandy 所发现的那样)时,Xcode 仍会尝试 link 反对它。

要在较新的 Xcode 中继续支持 iOS 5.x,只需将 crt1.3.1.o 从较旧的 Xcode 复制到适当的 …/usr/lib/ 较新的目录 Xcode。 Xcode 将仅在部署目标 <6.0 时使用 crt1.3.1.o——对于部署目标≥6.0 的项目,crt1.3.1.o 保持未使用状态,生成的 linked 二进制文件与它是…/usr/lib/crt1.3.1.o-加法前的。

要获得更新的 Xcode 以正确 link 具有 iOS 5.x 部署目标的项目:

  1. https://developer.apple.com/downloads/ 下载一个仍然有 crt1.3.1.o 的旧 Xcode。

    我使用了 Xcode 5.1.1,尽管任何具有 iOS 5.x 支持的 Xcode 应该可以工作(according to Wikipedia 应该是 Xcode 4.2-6.4).

  2. 打开 Xcode .dmg 并在磁盘映像上找到位于 /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS….sdk/usr/lib/crt1.3.1.o 的文件。

    因为我用的是Xcode 5.1.1,所以我的是…/iPhoneOS7.1.sdk/usr/lib/crt1.3.1.o.

  3. 复制到较新 Xcode 中相同的 Xcode.app 相对目录:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/crt1.3.1.o

    我的更新-Xcode 在撰写本文时是最新版本,Xcode 8.1(开箱即用,包括 iOS 10.1 SDK 和可下载 iOS 模拟器支持回到 iOS 8.1).


请注意,您需要在每次 Xcode 升级后重新执行这些步骤,因为标准 Xcode 更新过程只是吹走 Xcode.app 以及其中包含的所有内容随着更新 Xcode.app.

另请注意,我已经使用 Xcode 8.1 成功测试了它,以生成部署目标为 iOS 5.0 的应用程序,该应用程序将 运行 在我的 [=72] 上=] 10.1.1 iPad Air 2 & 我的 iOS 6.1.3 iPhone 4S。但是,我还没有使用此过程向 iOS App Store 提交构建。虽然 Apple 的认证不太可能对此有问题 (因为它毕竟是他们自己的 iOS crt1.3.1.o 库;并且由于没有其他方法可以针对最新的 SDK,同时仍然支持 iOS 回到 5.x,这几乎肯定是一些企业客户仍在做的事情),我不能在这里做出坚定的承诺。

删除 'Other Linker Flags' 列表中的 -lPods-(someCocoaPod) 行,但前提是 $(inherited) 位于顶部。起初我不确定,但令人安心的迹象是,当我离开编辑模式(继承)时,我仍然看到对我的 cocoapods 的引用。我在debug和release中测试,都报错,问题立马解决

除了使用旧 Xcode 安装中的库,您还可以从源代码重新编译它们:https://github.com/mringwal/csu-ios