0

現在、AIX と xlC コンパイラから Linux と GNU ツールチェーンに移行しています。C/C++ コンパイル プロセスでは、-qnoweakexpコンパイラ フラグを使用して弱いシンボルのエクスポートを無効にします。xlc コンパイラ リファレンスを参照してください。

gcc Options Summaryに同等のコンパイラ フラグが見つかりません。最終的な目標は、弱いシンボルがコンパイル ターゲットにエクスポートされないようにすることです。私が見つけた最も近い gcc フラグは でしたが-fno-weakgcc のマニュアルには、このフラグは製品コードでの使用を意図していないと記載されています。

背景: コンパイル ターゲットで使用しているフレームワークのいくつかの 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 に答える