現在、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()
つまり、一部のシンボルがソース コードで弱いと明示的に注釈されている場合ではなく、そのため、注釈を削除しても問題を解決することはできません。