xcode with boost : linker(Id) 关于可见性设置的警告

Posted

技术标签:

【中文标题】xcode with boost : linker(Id) 关于可见性设置的警告【英文标题】:xcode with boost : linker(Id) Warning about visibility settings 【发布时间】:2012-01-30 21:15:37 【问题描述】:

我一直在为我的 iPhone Xcode 项目使用下面链接中的 boost 框架: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html

它工作正常,但我总是收到数百个 Apple Mach-O Linker(id) 警告,例如:

在 __ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE 中直接访问全局弱符号 __ZTVN5boost17bad_function_callE 意味着弱符号在运行时不能被覆盖。这可能是由于使用不同的可见性设置编译不同的翻译单元造成的。

如何摆脱代码中的这些警告?

编辑: 通过设置 默认隐藏符号 = YES,我设法摆脱了大部分警告,但还有 3 个警告不会消失,谁能告诉我为什么?

再次编辑: 重建后,剩余的 3 个警告也消失了!所以我的解决方案确实奏效了!

【问题讨论】:

【参考方案1】:

如果 boost 被多个项目包含,每个项目的值必须相同

 Symbols Hidden by Default
 Inline Methods Hidden

【讨论】:

我第二次得到这个答案,它帮助我修复了警告。不知道该项目如何以“隐藏的内联方法”再次不同步而告终。 Xcode 更新改变了吗?呃.. +1 是的 - 与只需要匹配 Symbols Hidden by Default 的答案不同,我发现 Inline Methods Hidden 也需要匹配【参考方案2】:

Doe 刚刚想出了如何摆脱这样的数百个警告: 为整个目标或项目设置 Symbols Hidden by Default 构建设置为 YES

【讨论】:

yes 是问题还是解决方案? :) 设置为 yes 将修复警告 多么尴尬。对我来说,将默认隐藏的符号设置为否,删除了来自使用 Eigen 链接库的类似警告。 无论我以哪种方式设置“默认隐藏符号”(是或否),boost 编译器警告仍然存在。我在支持 ARC 的 iOS 项目上使用 XCode 4.4 中的 LLVM 编译器。仍在寻找解决方案...【参考方案3】:

链接器抱怨您的项目和 Boost 之间的可见性设置不同。

您还可以通过使用相同的兼容性设置重新编译 Boost 来解决该问题。

只需添加

cxxflags=-fvisibility=hidden

cxxflags=-fvisibility-inlines-hidden

bjam 命令行。

【讨论】:

-fvisibility=hidden 意味着 -fvisibility-inlines-hidden。只有前者是必要的。【参考方案4】:

如果 boost 被多个项目包含,每个项目的值必须相同

默认隐藏的符号 内联方法隐藏

nerith 说的对,但是在 Xcode 4.6.3 中,它们不是上面的“默认隐藏符号”和“隐藏内联方法”,我将 gcc_symbols_private_extern 设置为 yes,警告消失了。

【讨论】:

【参考方案5】:

默认隐藏符号设置为NO内联方法隐藏设置为NO对我有用。不需要将任何标志添加到其他 C++ 标志

【讨论】:

【参考方案6】:

我也有这个问题。

原来我不小心做了这样的事情:

#pragma GCC visibility push(default)
#include <SomeExternalLibrary.h>
void myExampleSymbol();
#pragma GCC visibility pop

我通过更改为:

#include <SomeExternalLibrary.h>
#pragma GCC visibility push(default)
void myExampleSymbol();
#pragma GCC visibility pop

【讨论】:

以上是关于xcode with boost : linker(Id) 关于可见性设置的警告的主要内容,如果未能解决你的问题,请参考以下文章

Xcode出现( linker command failed with exit code 1)错误总结

更新到 XCode 8.3.1:Apple Mach-O Linker Error Group with Snapkit error

Xcode出现( linker command failed with exit code 1)错误总结

Xcode出现( linker command failed with exit code 1)错误总结

Xcode真机报错clang: error: linker command failed with exit code 1 (use -v to see invocation)

linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!