我们目前正在从 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()
即,某些符号在源代码中没有被明确注释为弱的情况,因此无法通过删除注释来解决问题。