0

我们目前正在从 AIX 和 xlC 编译器迁移到 Linux 和 GNU 工具链。在我们的 C/C++ 编译过程中,我们使用-qnoweakexp编译器标志来禁用弱符号的导出。请参阅xlc 编译器参考

我在gcc Options Summary中找不到等效的编译器标志。最终目标是没有弱符号被导出到我们的编译目标。我能找到的最接近的 gcc 标志是-fno-weak,但是gcc 手册指出该标志不打算在生产代码中使用。

背景:我们需要将我们正在使用的框架的一些 C 库与我们的编译目标链接,这些库导出一些相同的弱符号,我们自己的代码在不使用此标志的情况下会这样做。这导致分段错误偶尔发生。这些符号显然是为我们正在使用的一些 STL 容器生成的,例如:

std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Clear()

即,某些符号在源代码中没有被明确注释为弱的情况,因此无法通过删除注释来解决问题。

4

1 回答 1

0

不完全等效,但对于您的用例应该足够了:-fvisibility-inlines-hidden. 此选项将导致内联函数(如来自标头的 STL 定义)无法从库中导出。有关此检查GCC wiki的更多信息。

于 2016-12-08T07:08:14.890 回答