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

时间:2017-04-10 18:21:20

标签: c++ ios xcode compiler-warnings

上周我更新了Xcode 8.3。我似乎无法摆脱这个编译器警告:

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. 为我的目标以及所有cocoapod目标添加了-fvisibility=hidden。 (described here
  6. 非常感谢任何见解。提前致谢。

    更新2017-04-10:

    这似乎是NewRelicAgent生成的问题。从我的项目中删除cocoapod消除了警告。进一步研究。

1 个答案:

答案 0 :(得分:1)

New Relic支持的回复:

  

我们与移动工程团队一起审核了这些警告信息。他们建议这些警告与Xcode 8.3中引入的差异有关 - 这不适用于Xcode 8.2中内置的最新版本的New Relic iOS代理。

     

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

     

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