3

我的 iOS 应用程序使用了一个依赖于 Boost 的库。在修改 3rdparty 构建系统时,我遇到了这样的链接器警告

ld: warning: direct access in ___cxx_global_var_init to global weak symbol
std::__1::basic_ofstream<char, std::__1::char_traits<char> >::~basic_ofstream()
means the weak symbol cannot be overridden at runtime.
This was likely caused by different translation units being compiled with different visibility settings.

还有这个

ld: warning: direct access in __GLOBAL__I_a to global weak symbol
boost::exception_ptr::~exception_ptr()
means the weak symbol cannot be overridden at runtime.
This was likely caused by different translation units being compiled with different visibility settings.

我看到关于这个警告还有很多其他问题。我听从了他们的建议,并确保所有构建中的可见性设置都是相同的(-fvisibility=hidden-fvisibility-inlines-hidden)。完全重建后,我仍然收到警告。

环境:

4

1 回答 1

6

问题是 Boost 构建脚本用作clang++编译器,但使用了另一个库和我自己的 iOS 应用程序clang(另一个库和我的应用程序是 Xcode 项目,其中构建是用clang.

在我用clang.

可悲的是,我不知道为什么这会有所帮助。我知道编译会将编译clang++器切换到 C++ 模式,打开/关闭某些设置。但这当然不能意味着使用覆盖在命令行上明确clang++指定的可见性设置?!欢迎评论或解释行为的其他答案。

于 2013-10-04T20:43:33.163 回答