首頁 > 後端開發 > C++ > 為什麼 C 編譯中需要 `__gxx_personality_v0`,它與例外處理有何關係?

為什麼 C 編譯中需要 `__gxx_personality_v0`,它與例外處理有何關係?

Linda Hamilton
發布: 2024-11-18 02:43:01
原創
498 人瀏覽過

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

揭示__gxx_personality_v0 的用途

使用gcc 編譯獨立C 程式時,可能會遇到與未定義符號相關的連結器「__gxx_個性_v0。」該符號位於libstdc 中,在獨立環境中不存在。新增定義「void *__gxx_personality_v0;」解決了問題,但理解其目的仍然至關重要。

__gxx_personality_v0 在堆疊展開表中扮演關鍵角色。這些表在彙編輸出中可見,並作為異常處理的基礎。根據 Itanium C ABI 的定義,__gxx_personality_v0 充當 Personality Routine,這是異常展開中的關鍵元件。

其解析為全域 NULL void 指標背後的「魔力」源自於不存在異常拋出。如果發生異常,符號的行為就會變得明顯。為了避免此類問題,在使用異常時,需要使用「-fno-exceptions」停用異常或與 g(自動新增「-lstdc」)連結。

以上是為什麼 C 編譯中需要 `__gxx_personality_v0`,它與例外處理有何關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板