簡體   English   中英

如何處理C ++ / GNU工具鏈中的鏈接器錯誤?

[英]How to handle linker errors in C++/GNU toolchain?

給定一個C ++ / GNU工具鏈,什么是解決鏈接器錯誤的好方法或工具或策略?

不確定確切的意思,但是如果您正在談論諸如以下這樣的隱秘鏈接器符號:

mylib.so:未定義符號:_ZN5CandyD2Ev

您可以使用c ++ filt為您解決難題。

C ++過濾_ZN5CandyD2Ev

將會返回Candy ::〜Candy(),因此不知道Candy的析構函數沒有被鏈接。

那么第一件事就是RTFM。 不,認真閱讀文檔。

如果您不想這樣做,請嘗試搜索出現的錯誤。

還有一些其他需要記住的事情:“缺失”符號通常表示您沒有包括適當的源代碼或庫; 有時,“缺少”符號表示您正在嘗試鏈接使用不同的處理約定(或不同的編譯器)創建的庫。 確保在適當的地方加上“ C”字樣; 聲明和定義不是一回事; 如果您的編譯器不支持“導出”,請確保在實例化對象時可使用模板代碼。

通過gcc工具鏈,我使用:

  • nm:在目標文件中查找符號
  • ld:查找庫如何鏈接
  • c ++ filt:從錯誤的名稱中查找符號的C ++名稱

檢查以獲取詳細信息。

查看報告有問題的符號的名稱。

  • 如果報告了缺少的符號,請找出應在哪些源文件或庫中定義這些功能/...。檢查編譯/鏈接器設置以找出為什么未編譯或鏈接這些文件的原因。
  • 如果存在多個定義的符號,則鏈接程序通常會提及包含它們的對象文件或庫。 查看這些文件/它們的來源,以找出兩個文件中都包含令人反感的功能/ ...的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM