在C++中構建項目時,我發現調試鏈接錯誤非常棘手,尤其是在挑選其他人的代碼時。人們使用什麼策略來調試和修復鏈接錯誤?調試鏈接錯誤的最佳實踐
回答
不知道你的專業水平是什麼,但這裏有基礎知識。
下面是VS 2005的鏈接器錯誤 - 是的,如果你不熟悉它,這是一個巨大的混亂。
ByteComparator.obj : error LNK2019: unresolved external symbol "int __cdecl does_not_exist(void)" ([email protected]@YAHXZ) referenced in function "void __cdecl TextScan(struct FileTextStats &,char const *,char const *,bool,bool,__int64)" ([email protected]@[email protected]@[email protected])
有幾個點集中在:
- 「ByteComparator.obj」 - 尋找一個ByteComparator.cpp文件,這是連接問題
- 「INT源__cdecl does_not_exist(無效)」 - 這是它無法找到符號,在這種情況下,功能名爲does_not_exist()
在這一點上,在許多情況下分辨率的最快方法是搜索t他爲此函數編寫代碼並查找實現的位置。一旦你知道該函數在哪裏實現,你只需要確保兩個地方連接在一起。
如果您使用的是VS2005,您可以使用「Project Dependencies ...」右鍵菜單。如果你使用的是gcc,你可以在makefile文件中查看可執行文件的生成步驟(用一堆.o文件調用gcc)並添加缺少的.o文件。
在第二種情況下,您可能會缺少沒有代碼的「外部」依賴項。 Win32庫通常在靜態庫中實現,您必須鏈接到這些庫。在這種情況下,請轉至MSDN或"Microsoft Google"並搜索API。在API描述的底部給出庫名稱。將其添加到項目屬性「Configuration Properties-> Linker-> Input-> Additional Dependencies」列表中。例如,函數timeGetTime()的page on MSDN告訴您在頁面底部使用Winmm.lib。
我遇到的一個常見鏈接錯誤是函數的使用與定義方式不同。如果你看到這樣的錯誤,你應該確保你使用的每個函數都在某個.h文件中正確聲明。
您還應該確保所有相關的源文件都被編譯到同一個lib文件中。我遇到的一個錯誤是,當我有兩組文件被編譯成兩個獨立的庫時,我在庫之間進行了交叉調用。
你有沒有想到失敗?
這個交叉調用,它給出了什麼類型的錯誤? – Doug 2013-01-24 19:01:39
C運行時庫往往是最大的罪魁禍首。確保你的所有項目都具有相同的設置,包括單線程和多線程以及靜態與dll。
MSDN文檔很適合指出特定Win32 API調用需要的庫,如果它缺少的話。
除此之外,它通常歸結爲打開詳細標誌和涉水尋找線索輸出。
- 1. libgvr.so鏈接最佳實踐?
- 2. BLL錯誤最佳實踐
- 3. 圖像鏈接的最佳實踐
- 4. 最佳實踐:處置鏈接服務器錯誤
- 5. 調試vagrant + docker + flask的最佳實踐
- 6. 調試xcode ios 5.0的最佳實踐?
- 7. 的NetBeans調試最佳實踐
- 8. 調試node.js過程的最佳實踐?
- 9. SQL Server最佳實踐錶鏈接
- 10. 鏈接提交問題 - 最佳實踐
- 11. Android開發/調試最佳實踐
- 12. NodeJS捕捉錯誤的最佳實踐
- 13. (錯誤)記錄的最佳實踐
- 14. 錯誤在Rails的最佳實踐
- 15. RESTful API中的錯誤最佳實踐
- 16. 鏈接的AND或鏈接的OR最佳實踐
- 17. 調用最佳實踐
- 18. Ruby連接最佳實踐
- 19. Cassandra連接最佳實踐
- 20. 接口最佳實踐
- 21. 最佳實踐錯誤處理
- 22. IOS錯誤處理最佳實踐Dev
- 23. 最佳實踐:處理類錯誤
- 24. WCF和錯誤處理,最佳實踐
- 25. UIWebView - 錯誤處理最佳實踐
- 26. 最佳實踐錯誤處理ASP.Net MVC
- 27. Django ajax錯誤響應最佳實踐
- 28. Rails最佳實踐 - 處理錯誤rails
- 29. 最佳實踐
- 30. 最佳實踐
那麼,如果我找到了實施該方法的地方,並且我沒有發現任何問題,我下一步該做什麼?有沒有辦法獲得鏈接的文件列表?您的答案對初學者來說確實很好,但這是鏈接器調試的前1名結果,並且在函數名稱中還有其他可能的原因,而不是拼寫錯誤。 – 2015-10-26 14:01:11