首頁 >後端開發 >C++ >如何解決將靜態 C 庫與 C 程式碼連結時出現「未定義引用」錯誤?

如何解決將靜態 C 庫與 C 程式碼連結時出現「未定義引用」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-12-09 19:33:12344瀏覽

How to Resolve

將靜態C 庫與C 程式碼連結:解決「未定義引用」錯誤

在C 中,使用自訂malloc/free 庫重載new 和delete運算子可能會導致將靜態庫與C 程式碼組合時出現連結錯誤。儘管確保了正確的連結順序,但由於名稱重整,可能會出現未定義的參考錯誤。

了解名稱重整

C 編譯器使用稱為名稱重整的機制,該機制會修改函數名稱以包含參數和參數等詳細資訊傳回類型。這確保了具有不同簽名的重載函數可以在程式中共存。

連結錯誤問題

將靜態 C 函式庫與 C 程式碼連結時,連結器需要來自函式庫的函式名稱以符合 C 編譯器產生的損壞名稱。但是,C 編譯器不套用名稱修改。

解決方案:使用 extern "C"

要解決此問題,請將引用 C 庫的函數聲明括在 extern "C" 中“堵塞。 >透過抑制名稱修改,連結器可以在靜態庫中找到正確的符號定義並解決未定義的參考錯誤。

以上是如何解決將靜態 C 庫與 C 程式碼連結時出現「未定義引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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