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编译错误的出现和解决!