【问题标题】:suppress instance method override linker warning framework xcode抑制实例方法覆盖链接器警告框架xcode
【发布时间】:2012-08-03 11:55:19
【问题描述】:

我有一个库,它开始在 XCode 4.4 下抛出几个链接器警告。警告类似于“ld: 警告: instance method 'methodName:' in category from overrides method from class in”

该框架仍然可以正常工作,我认为编写它的公司会在下一个版本中纠正这个问题,但目前这些警告非常烦人。有什么方法可以在不禁用所有链接器警告的情况下关闭它们?

【问题讨论】:

  • 我认为这意味着制作图书馆的人不正确地对某些东西进行了子类化。似乎没有破坏任何东西,但链接器有点烦人,因为我无法修复它,因为它是封闭源代码。
  • 你是否在你的类中创建/命名了一个方法,与另一个类中的另一个方法相同?
  • 他们不是我的课。它在一个预建的库中。

标签: xcode frameworks linker warnings


【解决方案1】:

如果存在隐藏该警告的选项,它将位于:

Project Navigator(左侧的文件列表)-> [Project name](带有蓝色图标的那个)-> Build Settings -> Apple LLVM compiler 3.1 - Warnings

还有:

In Xcode, how to suppress all warnings in specific source files?

【讨论】:

  • 谢谢。编译器部分中没有特定于库的警告或我看到的特定警告。我可以关闭所有警告,但这正是我想要避免的。另一个引用的帖子也适用于将要编译的文件,但库和头文件不在那里显示,因此无法专门在它们上设置标志。我必须假设没有办法禁用 xcode 中的警告,因为它来自库。
  • 这是个坏建议。我相信在 Build Settings UI 中有许多没有复选框的 clang 警告。一般来说,在文件上设置一个特定的-W 选项将在编译期间解决这个问题。在文件上设置-fdiagnostics-show-option 选项,clang 会告诉你使用哪个-W。在这种特殊情况下,这是行不通的,因为 OP 的问题是关于 链接器,而不是编译器。
  • 另一个针对编译器而非链接器的解决方案是诊断编译指示:clang.llvm.org/docs/…
  • 如果您在使用新的 xCode 7 时遇到问题,会为您提供整个“此函数覆盖成员但不声明覆盖”的说明;您可以在上述相同的项目构建设置中将 -Wno-inconsistent-missing-override 标志添加到“其他警告标志”
【解决方案2】:

通过在 Xcode 构建设置区域的“其他链接器标志”中添加标志,我提出了两个选项:

1) 添加-Xlinker -w 将抑制所有 链接器警告,无论类型如何(这是ld(1) 的-w 标志)。显然,这将使这个特定的警告安静下来,但所有其他 ld 警告也是如此。

2) 添加-Xlinker -no_objc_category_merging 将跳过链接器在链接期间将所有类别方法组合到基类中的优化步骤,而这将在运行时发生。启动时可能会稍微慢一点,但它可能仍然比运行时的方法调动快,并且由于 ld(1) 正是在此步骤中发出警告,所以它也会跳过。

似乎 ld 没有办法像编译器那样通过外科手术抑制任何单独的警告,尽管它有几个或一组的特殊标志(这些都没有帮助)。上述两种解决方案都可能不推荐用于生产代码,但在某些情况下,其中一种可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2017-12-09
    • 2019-12-22
    • 2013-02-01
    • 2019-12-21
    相关资源
    最近更新 更多