GCC C 連結器錯誤:虛擬表和建構子的未定義引用
在C 中,虛擬函數允許衍生類別覆蓋其定義的方法基底類別。當連結使用虛擬函數的程式時,連結器要求這些方法的定義存在於目標檔案中。未能提供這些定義會導致未定義的引用錯誤,例如:
可能原因
這些錯誤可能因多種原因而發生,包括:
確認靜態庫和類別可用性
庫位數: 檢查靜態庫是否為64位,請使用下列檔案指令:
file -L <library_path>
如果函式庫是64位,它應該顯示 64 位 x86-64 共享物件。
類別可用性: 使用objdump -t 指令檢查庫是否包含特定的class:
objdump -t <library_path> | grep <class_name>
如果該類別存在,它將在輸出中列出。
範例問題
如提供的錯誤日誌所示,對SomeClass::close() 的未定義引用表明該類別已被定義使用但尚未定義。同樣,對 SomeClass::SomeClass() 和 SomeOtherClass 的 vtable 的未定義引用表明 SomeOtherClass 類別的建構函數和虛擬表未在物件檔案中定義。
解決方案
要解決此問題,請確保在適當的子類中定義所有虛擬函數,包含所需的頭文件,並將正確的庫連結到您的節目。
以上是為什麼我在 GCC C 中收到'對虛擬表和建構函數的未定義引用”連結器錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!