首頁  >  文章  >  後端開發  >  為什麼將獨立的 C 程式與 gcc 連結會導致對「__gxx_personality_v0」的未定義引用?

為什麼將獨立的 C 程式與 gcc 連結會導致對「__gxx_personality_v0」的未定義引用?

Linda Hamilton
Linda Hamilton原創
2024-11-20 14:17:131010瀏覽

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,它被稱為個性例程。

在沒有異常的情況下,將此符號定義為全域 NULL void 指標將“起作用”,因為不會引發異常。但是,嘗試引發異常將導致意外行為。

替代解決方案:

  • 使用 -fno-exceptions 停用異常。
  • 如果也沒有使用 RTTI,請加 -fno-rtti。
  • 對於使用異常的程序,請使用 g 而不是 gcc 進行編譯,它會自動包含必要的函式庫 (-lstdc )。

以上是為什麼將獨立的 C 程式與 gcc 連結會導致對「__gxx_personality_v0」的未定義引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn