首先這個問題引起的原因就是程序運行時加載dll無法在當前環境下找到,然而百度搜索的大部分結果可能會讓這個問題更加混亂難以解決,甚至讓你走彎路最后導致你放棄一些技術方案或者運行系統。求人不如求己,該文章就dll not found如何排查進行講解為自己總結一次也為各位搜到這篇文章急需解決的各位朋友提供一些幫助。
准備工具:
depends 下載地址:http://www.dependencywalker.com/ 用來查看進程或dll的相關依賴 不過這個工具已經停止維護了
Dependencies 下載地址:https://github.com/lucasg/Dependencies/releases depends的替代品 目前代碼還在更新
ProcessMonitor 下載地址:https://download.sysinternals.com/files/ProcessMonitor.zip 進程監視器,將你進程運行過程中的行為都打印出來
排查問題:
1、檢查自己的引用dll名字是否正確,粗心大意將dll引用寫錯這是最尷尬的。
2、使用depends進行 排查當前環境是否缺少依賴的dll, 放在5,6年前大部分的dll基本還是C++編譯基本上缺少的dll我們都很容易通過它迅速在當前機器的runtime中找到復制到程序根目錄也就解決了。
3、當今各種跨平台語言流行,交叉編譯依賴的庫導致的dll not found就多了起來,而且在使用depends 或者 dependencies 有時候可能會讓你混亂 引用列表紅一大片你也不知道真正缺少的dll是什么,這時候我們就應該使用到ProcessMonitor 來通過進程運行日志來排查真正缺少的dll是什么,一般打印日志都會明確的告訴你not found dll是什么只要細心一點肯定可以排查出來。
總結:
以上工具使用方式將在其它文章進行補足,該文章僅僅是為dll not found排查進行思路引導,因為大部分人遇到dll not found的第一件事很有可能就是百度搜索,但是這樣反而容易讓你的問題排進入到錯誤的方向!因為大部分情況下我們使用的dll幾乎是不相同的,比如各種二次開發的sdk 如果你將別人解決sdk dll not found 的解決方法拿來解決自己的問題那么99%是沒辦法解決你當前的囧境。所以學會使用工具、日志更加科學的排查自己遇到的問題才是真正的解決辦法。