ホームページ  >  記事  >  バックエンド開発  >  C コンパイルに __gxx_personality_v0 が必要な理由と例外処理との関係

C コンパイルに __gxx_personality_v0 が必要な理由と例外処理との関係

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-18 02:43:01456ブラウズ

Why is `__gxx_personality_v0` Needed in C   Compilation, and How Does it Relate to Exception Handling?

__gxx_personality_v0 の目的を明らかにする

gcc を使用して自立型 C プログラムをコンパイルすると、未定義のシンボルに関連するリンカー エラーが発生する可能性があります「__gxx_personality_v0」このシンボルは libstdc にありますが、独立した環境には存在しません。 「void *__gxx_personality_v0;」という定義を追加します。この問題は解決しますが、その目的を理解することが依然として重要です。

__gxx_personality_v0 は、スタック巻き戻しテーブルで重要な役割を果たします。これらのテーブルはアセンブリ出力に表示され、例外処理の基礎として機能します。 Itanium C ABI で定義されているように、__gxx_personality_v0 は、例外の巻き戻しにおける重要なコンポーネントであるパー​​ソナリティ ルーチンとして機能します。

グローバル NULL void ポインターとしての解決の背後にある「魔法」は、例外スローがないことに起因します。例外が発生した場合、シンボルの動作が明らかになります。このような問題を回避するには、例外を使用する場合、「-fno-Exceptions」で例外を無効にするか、g でリンクする (「-lstdc」が自動的に追加されます) ことが必要になります。

以上がC コンパイルに __gxx_personality_v0 が必要な理由と例外処理との関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。