归档时应用程序获取“架构 armv7 的未定义符号”,除非我不剥离库中的链接产品

Posted

技术标签:

【中文标题】归档时应用程序获取“架构 armv7 的未定义符号”,除非我不剥离库中的链接产品【英文标题】:App gets "Undefined symbols for architecture armv7" when archiving, unless I don't Strip Linked Product in a library 【发布时间】:2013-11-26 00:46:48 【问题描述】:

我的应用使用了四个库。其中两个是第三方的(从源代码构建),两个是我自己的。构建调试和应用程序的发布版本没有任何问题。

但是,当我尝试归档应用程序时,我的个人库之一(只是两个库中的一个)中的每个符号都会出现“架构 armv7 的未定义符号”。

我发现如果我在该库的构建设置中将“Strip Linked Product”设置为 NO,我可以归档应用程序。

我的问题是,为什么我只需要为四个库之一这样做?有什么办法可以解决这个问题吗?

我使用的是 Xcode 5.0.2。该应用程序和所有库都是使用 ios 7 的部署目标和标准架构(armv7 和 armv7s)构建的。

【问题讨论】:

【参考方案1】:

问题是我将该静态库的链接时间优化设置为 YES。

我使用 DTS 票证来解决这个问题,所以与其试图解释我得到的回复,我只想引用它:

“实际上,问题在于为您的库启用了 Link-Time Optimization 构建设置。将 Strip Linked Product 设置为 YES 并将 Link-Time Optimization 设置为 NO 导致 Xcode 在链接期间的优化过程之前首先剥离您的库(您可以通过查看构建日志来查看它);链接失败,因为从库中删除了所需的符号。 [将剥离的链接产品设置为 NO 时] 您将获得成功的存档,因为在链接期间的优化过程之前没有删除任何符号。将您的库的 Link-Time Optimization 设置为 NO 应该可以解决问题。” -- Linda Ouandji

【讨论】:

以上是关于归档时应用程序获取“架构 armv7 的未定义符号”,除非我不剥离库中的链接产品的主要内容,如果未能解决你的问题,请参考以下文章

XCode 4.5 - 架构 armv7 的未定义符号

FBSDKLoginCore 架构 armv7 的未定义符号

架构 armv7 的未定义符号

架构 armv7 的未定义符号:“_OBJC_CLASS_$_FIRApp”

架构 armv7 的未定义符号

架构armv7的未定义符号?