完美解決Indy 編譯提示版本不一致的問題
1,起因
某delphi程式A使用了Indy9.0.18元件。機器中原本自帶老版本的Indy元件9.0.12,後升級到9.0.18,使用一直正常。
某次操作將程式A重新build all了一下,結果提示如下資訊,此後即便是compile也會出錯。
[Fatal Error] uMain.pas(11): Unit IdServerIOHandlerSocket was compiled with a different version of IdServerIOHandler.TIdServerIOHandler
2,解決
顯然錯誤原因在於indy元件出現了交錯使用,應將老版本的元件徹底刪除乾淨。
先是重灌Indy元件9.0.12。將Delphi7\Source\Indy目錄下的檔案用新版覆蓋,然後重新編譯。將生成的dcu拷貝到LIb目錄覆蓋。
結果問題依舊。
在delphi目錄下搜尋id檔案,發現Lib\Debug下有大量id*.dcu檔案。可能是這些檔案是舊版的。
於是採用9.0.12的dcu檔案將其覆蓋,再次rebuild程式A,通過!
3,分析
那麼為什麼會和“Lib\Debug”目錄有關呢? delphi IDE配置了搜尋目錄“$(DELPHI)\Lib”,但並未配置使用Lib下的Debug目錄呀。
其實新編一個工程,放入indy新版元件元件,即使Lib\Debug下有舊版元件,rebuild也是不會出錯的。
分析發現,這個“Lib\Debug”目錄和工程配置有關。原來,本人想要debug程式A,於是在工程選項中勾選了“Use Debug DCUs”
此選項將自動使用“Lib\Debug”目錄的dcu檔案,而不是Lib目錄下的dcu。因為Lib目錄下的dcu檔案中不含除錯資訊。
此時我們開啟IDE的debugger選項視窗,可以發現IDE使用到了“Lib\Debug”目錄的dcu檔案。
至此問題得到了解決,並且做到了“知其然且知其所以然”!
以上這篇完美解決Indy 編譯提示版本不一致的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。