1. 程式人生 > 實用技巧 >[轉載]定位 C++/CLI 庫的載入失敗異常

[轉載]定位 C++/CLI 庫的載入失敗異常

程式在載入 C++/CLI 動態庫的時候,出現FileLoadException,常見錯誤是其中某些依賴沒有找到,這個時候異常資訊應該是類似:一個xxx的依賴沒有找到;這個問題很好解決,確定缺少的依賴補充上就可以了,可以使用dumpbin工具檢視相關的依賴:

1
dumpbin /dependents target.dll


但是,有一種比較隱晦的錯誤導致動態庫載入失敗,錯誤提示:未能載入由xxx.dll匯入的過程,除了這些,幾乎沒有什麼有用的錯誤資訊讓我們來確定到底出現了什麼問題。一般來說,按照目前我遇到的問題,這個一般都是對應的庫檔案呼叫了當前平臺不支援的api導致的。當然,這個問題不易在開發的機器上發現,因為能呼叫到這個api就代表除錯機器上有對應平臺版本的SDK,一般如果前期沒有發現到這個問題,那麼問題被發現時肯定是在生成環境,所以需要開發人員注意呼叫介面的支援平臺。

要定位是什麼介面導致的問題,需要藉助其他的除錯工具來排查。微軟的 Windows SDK 提供了對應的工具gflags.exe,藉助這個工具,我們可以在除錯的過程中看到詳細的動態庫載入資訊,在這些資訊中可以定位到底是什麼介面導致庫檔案載入失敗。當然,你需要在出現問題的機器上使用這個工具進行操作,並通過 Visual Studio 進行遠端除錯。

如上圖顯示,通過輸入你程式的名字和開啟Show loader snaps開關,應用後使用 Visual Studio 進行除錯,可以在輸出視窗看到詳細的載入資訊:

from :https://gandalfliang.github.io/2019/01/22/c-cli-debug-assembly-load-error/