这些 Dsymutil 警告在 XCode 4.5 中意味着啥?

Posted

技术标签:

【中文标题】这些 Dsymutil 警告在 XCode 4.5 中意味着啥?【英文标题】:What do these Dsymutil Warnings mean in XCode 4.5?这些 Dsymutil 警告在 XCode 4.5 中意味着什么? 【发布时间】:2013-01-23 21:27:37 【问题描述】:

我正在链接一个用于 ios 的静态框架,针对 armv7 ios 6 应用程序,我怀疑原始二进制文件来自 XCode 3.x 并使用 GCC 编译,我现在使用 CLang 编译器链接它。我没有框架的源代码,只有二进制文件:

(null): warning: (armv7) /.../DerivedData/.../armv7/HardwareObjectFile.o unable to open object file

我收到 69 条类似上述的警告,每个链接到静态框架的 .o 文件都有一条。

此警告是否严重?我已经简化了巨大的路径,这似乎表明库中的二进制文件在“/Users/somedeveloperthatisntme”中硬编码了一个路径,这几乎没有帮助,但不存在,因为我在一台计算机上使用这个库,甚至没有有一个名为“Users/somedeveloperthatisntme”的文件夹。

Dsymutil 似乎是一个“操作存档的 DWARF 调试符号文件”的工具,尽管我对它是什么以及它的作用一无所知,尽管 Apple 提供了详尽的文档,它告诉我什么,但从来没有, 为什么。它在做什么,这个警告对我意味着什么?我怀疑我需要供应商提供的新库/静态框架来解决这个问题?

更新:我无法解决这个问题,原因似乎在于由非常旧的 XCODE 版本编译的非常旧的二进制文件,作为第三方供应商的移动框架的一部分提供。这种情况下的问题将通过让该供应商重建他们的库来解决,我要求他们这样做,因为警告让我发疯,但他们似乎无法做到。最后,我放弃了他们的技术并用其他东西取而代之。 (笑)

【问题讨论】:

【参考方案1】:

这些错误与您使用的架构和您引用的资源有关。我自己也不明白原因,但如果你想让它们消失,请转到构建设置,然后构建选项,然后选择调试信息格式并选择 DWARF。

【讨论】:

由于我没有这个库的源代码,我认为我无法通过更改二进制库/框架上的构建选项来重建 BINARIES。 仅供参考,这样做的缺点是它对分析和仪器工具隐藏了一些调试数据。【参考方案2】:

我在另一边,正在构建一个库供其他人使用,我能够通过在构建设置中设置“GCC_GENERATE_DEBUGGING_SYMBOLS = NO”来更改库项目,以使这些警告在应用程序项目中消失消耗了输出框架。

这不能解决您的问题,但如果您与该供应商联系,您可以将其传递。

【讨论】:

其实这可能是解决方案。联系供应商告诉他们这一点并获得新版本。 仅供参考,更改此设置意味着您的断点将不再触发。 这也是我构建框架的完美解决方案。我认为我们在构建框架时不需要触发断点,使用我们框架的人不会在其中放置断点。【参考方案3】:

其他答案包含有用的信息,但我希望简明扼要地写下真正的答案:

你无法解决这个问题,错误的含义很简单:当前链接器将这些库文件视为包含无法打开的元素。

要解决警告,请联系供应商并获取已使用更高版本的 CLANG 重建的重新编译库。

【讨论】:

【参考方案4】:

我所做的只是删除 /Library/Developer/Xcode/DerivedData 文件夹,它为我修复了所有问题。

【讨论】:

根据我的经验,它修复了随机编译/链接错误,但没有修复此警告。【参考方案5】:

出现这些警告的另一个原因是项目中发布版本的符号剥离设置不正确。联系框架的作者,告诉他们用正确的符号剥离设置制作一个新的二进制文件。

【讨论】:

我猜他们故意从发布版本中剥离 DSYM 以使其更精简。现在应该有一些方法可以忽略上述框架的这些警告......

以上是关于这些 Dsymutil 警告在 XCode 4.5 中意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

XCode 4.5 警告父/子类的类别之间的方法名称冲突

xCode iOS 开发 - Apple Mach-O 链接器错误 // Dsymutil 错误

如何在 Xamarin 中修复 dsymutil

如何调试 dsymutil 错误:“Clang 模块预计只有 1 个编译单元。”

无法使用设备在 xcode 4.5 上运行我的代码

使用 iOS 6 SDK 和 Xcode 4.5 构建 armv6 架构(目标 iOS 3.1.3)?