Unity3D運(yùn)行報(bào)DllNotFoundException錯(cuò)誤的解決方案
起因
unity程序build到pc上,拿到其他人的機(jī)器上結(jié)果有些功能不正常,看log里面大概是
Fallback handler could not load library: xxx.dll
DllNotFoundException: xxx.dll
初看以為是缺失dll,但是實(shí)際上并不是這樣,首先在很多人機(jī)器上都是沒有問題的,只在極少數(shù)機(jī)器上才出現(xiàn)異常,另外報(bào)錯(cuò)的dll都是有的,并不存在缺失的問題。
后來網(wǎng)上搜了一下,看到http://answers.unity3d.com/questions/993154/failed-to-load-dll-error.html 中提到了
it only seems to happen with C++ DLLs that have dependencies that aren't already loaded.
好吧,這個(gè)理由很理想,就是unity的項(xiàng)目依賴了A.dll,而A.dll又依賴了B.dll,而B.dll缺失,導(dǎo)致load A.dll時(shí)異常,我覺得這是unity打包的坑~
那么主要原因就是大部分機(jī)器上都帶有A.dll,而少部分機(jī)器上缺失B.dll
解決
使用dll Dependency Walker這個(gè)軟件來查找dll所依賴的其他dll,就可以很容易的查到缺失的是哪個(gè)dll,把它加上就好
在我這個(gè)case中,使用了unity的easymovietexture插件來播放視頻,而easymovietexture依賴ffmpeg,其中一個(gè)dll依賴opencl.dll,大部分機(jī)器上都有這個(gè)dll,而少部分機(jī)器上是沒有這個(gè)dll,取而代之的是opencl32.dll和opencl64.dll,可能是dll的依賴兼容性之類的沒做好吧!
最終問題解決,欣慰~
補(bǔ)充:Unity3d使用dll時(shí)有些電腦會(huì)報(bào)DllNotFoundException錯(cuò)誤 無法使用dll庫(kù)
unity3d開發(fā)過程中使用了外部動(dòng)態(tài)鏈接庫(kù)dll,有些電腦運(yùn)行工程時(shí)會(huì)報(bào)DllNotFoundException的錯(cuò)誤,這是由于該dll中引用系統(tǒng)內(nèi)的dll不存在的原因。

團(tuán)隊(duì)開發(fā)過程中所有人都可以 就是我自己的電腦不行,無論如何處理都不行,工程重新加載 ,平臺(tái)切換等全部不行 。
最后定位到電腦系統(tǒng)問題。
找到自己使用dll庫(kù),
下載depends軟件,打開使用的dll庫(kù)

如下圖 可以發(fā)現(xiàn)系統(tǒng)中缺少該dll,

去網(wǎng)上下載該庫(kù)放入system32內(nèi)

重新進(jìn)工程就可以了!
補(bǔ)充:unity 無法使用 dll 庫(kù)
出錯(cuò) :
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
使用Framework 3.5 重新編譯庫(kù)工程 即可~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C# 中使用Stopwatch計(jì)時(shí)器實(shí)現(xiàn)暫停計(jì)時(shí)繼續(xù)計(jì)時(shí)功能
這篇文章主要介紹了C# 中使用Stopwatch計(jì)時(shí)器可暫停計(jì)時(shí)繼續(xù)計(jì)時(shí),主要介紹stopwatch的實(shí)例代碼詳解,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
.NET使用IResourceMonitor實(shí)現(xiàn)獲取資源信息
在 Microsoft.Extensions.Diagnostics.ResourceMonitoring 包提供了一系列定制 API,專用于監(jiān)視 .NET 應(yīng)用程序的資源利用率,本文將利用IResourceMonitor來實(shí)現(xiàn)獲取資源狀態(tài)信息,感興趣的可以了解下2024-01-01
C#實(shí)現(xiàn)多線程啟動(dòng)停止暫停繼續(xù)的示例代碼
本文主要介紹了C#實(shí)現(xiàn)多線程啟動(dòng)停止暫停繼續(xù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01

