undefined reference to 問題緣由總括

錯誤現象:

(.text+0x13): undefined reference to func'  關於undefined reference 的問題,說明如下


1.鏈接時缺失了相關目標文件(.o)

---文件存在函數調用或依賴關係。因爲在鏈接的時候,發現找不到某個函數的實現文件。解決方法:在編譯鏈接時候,寫明依賴關係,更有效的是將其寫入makefile文件,更清晰和好管理。


2.鏈接時缺少相關的庫文件(.a/.so)

---函數的實現被封裝在靜態或動態庫中,但,由於沒有在鏈接的時候,引進這些函數,更直觀一些,也即,靜態或動態庫。


3.鏈接的庫文件中又使用了另一個庫文件

---由於我們的關注點在自己寫的程序上,因此,對此類問題,可以看做是較爲隱蔽的類型。這種情況就類似於,我們的庫或者程序中引用了第三方庫(如 pthread.a),則,同樣在鏈接的時候需要給第三方庫的路徑和庫文件,否則就會得到undefined reference 的錯誤。


4.多個庫文件鏈接順序問題

---這種情況也是需要重點關注度的。隱蔽性不比第三種差。在鏈接命令中給出所依賴的庫時,需要注意庫之間的依賴順序,依賴其他庫的庫一定要放在被依賴庫的前面,這樣才能真正避免undefined reference錯誤,完成正常編譯鏈接。


5.在C++代碼中鏈接C語言的庫

---當你的庫文件由C代碼生成的,則在C++代碼中鏈接庫中的函數時,也會碰到undefined reference的問題。這種問題,需要在函數的調用文件內,把和C語言庫相關的頭文件用extern "C"的聲明包含即可。

發佈了42 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章