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

iOS: C++ warnings in compiler after updating to Xcode 8.3

本文关键字:编译器 C++ 警告 更新 Xcode iOS      更新时间:2023-10-16

我上周更新到了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更改为"是"-在所有目标中
  2. Symbols Hidden by Default更改为否 - 在所有目标中
  3. 基本上这里的所有内容(尽管不完全相关(
  4. 清理/删除派生数据等
  5. -fvisibility=hidden添加到我的目标以及所有可可豆荚目标。(此处描述(

任何见解都非常感谢。提前谢谢。

2017-04-10更新:

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

来自 New Relic 支持的响应:

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

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

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