iOS:更新到Xcode 8.3后编译器中的C++警告

问题描述:

上周我更新为Xcode 8.3。我似乎无法摆脱这种编译器警告:iOS:更新到Xcode 8.3后编译器中的C++警告

ld: warning: direct access in function 'std::__1::basic_filebuf<char, std::__1::char_traits<char> >::open(char const*, unsigned int)' from file '/Path/To/Derived/Data/Xcode/DerivedData/myapp/Build/Intermediates/myapp.build/Debug-iphoneos/myapp.build/Objects-normal/arm64/myapp_lto.o' to global weak symbol 'std::__1::basic_filebuf<char, std::__1::char_traits<char> >::open(char const*, unsigned int)' from file '/Path/To/Derived/Data/Xcode/DerivedData/myapp/Build/Intermediates/myapp.build/Debug-iphoneos/myapp.build/Objects-normal/arm64/myapp_lto.o' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.

我一直试图解决此警告:

  1. 更改Symbols Hidden by Default到YES - 在所有目标
  2. 更改Symbols Hidden by Default到NO - 在所有目标中
  3. 基本上所有的东西here(虽然不完全相关)
  4. 清理/删除派生数据/ etc
  5. -fvisibility=hidden添加到我的目标以及所有cocoapod目标。 (described here

任何洞察力,非常感谢。提前致谢。

UPDATE 2017年4月10日:

这似乎是由NewRelicAgent产生的问题。从我的项目中删除cocoapod消除了警告。进一步研究这一点。从New Relic的支持

+0

可能有帮助:http://*.com/questions/9894961/strange-warnings-from-the-linker-ld – NathanOliver

+0

谢谢,@NathanOliver我其实也看到了这篇文章。我已经浏览了每个目标(包括cocoapod目标),并将'-fvisibility = hidden'添加到其他C++链接器标志。此警告仍然存在。 – Warblr

响应:

我们回顾我们的移动工程师团队这些警告消息。他们建议这些警告与Xcode 8.3中引入的差异有关 - 它不适用于Xcode 8.2中内置的New Relic iOS Agent的最新版本。

他们还强调,这些警告似乎没有任何负面影响 - 但请让我们知道,如果你发现任何其他问题。

这个问题很可能会在代理的下一个版本中得到解决,当它将使用Xcode 8.3构建时。