ホームページ >バックエンド開発 >C++ >独立した C プログラムを gcc にリンクすると、「__gxx_personality_v0」への未定義の参照が発生するのはなぜですか?

独立した C プログラムを gcc にリンクすると、「__gxx_personality_v0」への未定義の参照が発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-20 14:17:131067ブラウズ

Why does linking a free-standing C   program with gcc result in an undefined reference to `__gxx_personality_v0`?

gcc を使用して自立型 C プログラムをコンパイルおよびリンクすると、__gxx_personality_v0 への未定義の参照が原因でリンカー エラーが発生することがあります。このシンボルの目的を理解するために、指定したエラー メッセージのコンテキストでその役割を調べてみましょう。

__gxx_personality_v0 の役割は何ですか?

シンボル __gxx_personality_v0スタック アンワインド テーブルで利用され、スタック アンワインドのアセンブリ出力に表示されます。 Itanium C ABI によれば、これは Personality Routine と呼ばれます。

例外がない場合、例外がスローされないため、このシンボルをグローバル NULL void ポインターとして定義すると「機能」します。ただし、例外をスローしようとすると、予期しない動作が発生します。

代替解決策:

  • -fno-Exceptions を使用して例外を無効にします。
  • RTTI も使用されていない場合は、-fno-rtti を追加します。
  • 例外を使用するプログラムの場合は、gcc の代わりに g を使用してコンパイルします。これにより、必要なライブラリ (-lstdc ) が自動的に組み込まれます。

以上が独立した C プログラムを gcc にリンクすると、「__gxx_personality_v0」への未定義の参照が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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