前兩天覺(jué)得好玩拆檬,就用Python的Kivy庫(kù)寫(xiě)了個(gè)生命模擬的小程序迷捧,可今天竟莫名奇妙地不能運(yùn)行了专酗,一運(yùn)行就提示無(wú)法在 libpng16-16.dll 中定位 inflateReset2 函數(shù)映琳,上網(wǎng)搜也只是說(shuō) libpng16-16.dll 或是 zlib1.dll 有問(wèn)題铜涉,需要替換掉溪北,可我之前都運(yùn)行很好啊桐绒,至少Python目錄下的文件是沒(méi)問(wèn)題的,這幾天我并沒(méi)有更新Python的任何東西刻盐,這個(gè)問(wèn)題真是令人不解掏膏。
不過(guò)通過(guò)網(wǎng)上搜索,至少知道了 inflateReset2 是在 zlib1.dll 中的敦锌,Kivy是通過(guò) libpng16-16.dll 間接引用了這個(gè)函數(shù)馒疹,所以它的錯(cuò)誤提示實(shí)際是說(shuō) zlib1.dll 中沒(méi)有這個(gè)函數(shù)。于是我用 depends 查看了一下Python目錄下的 zlib1.dll乙墙,發(fā)現(xiàn)它是含有 inflateReset2 的颖变,這真是奇了怪了……
后來(lái)上網(wǎng)搜到有人也有類(lèi)似的問(wèn)題,有人回答說(shuō)很可能是某個(gè)程序改變了系統(tǒng)環(huán)境的搜索路徑听想,覆蓋了Python的路徑腥刹,但是我把Python中包含 zlib1.dll 的目錄作為搜索路徑的第一條也還是出現(xiàn)同樣的問(wèn)題。但這個(gè)回答提醒了我汉买,我去 C:\Windows\System32 下果然看到了 zlib1.dll 文件衔峰,但這個(gè)文件的大小比Python中的小很多,可見(jiàn)這個(gè)是個(gè)很舊的版本,一看這個(gè)文件的創(chuàng)建時(shí)間垫卤,竟是今天威彰!也就是說(shuō),這個(gè)舊版的 zlib1.dll 并不是系統(tǒng)自帶的穴肘,而是今天我裝軟件的時(shí)候給裝上的歇盼,而這個(gè)創(chuàng)建時(shí)間恰好同我裝工行網(wǎng)銀助手的時(shí)間一致,原來(lái)這個(gè)“有問(wèn)題”的 zlib1.dll 是工行網(wǎng)銀助手給裝上的评抚!把 zlib1.dll 刪去以后豹缀,我的Python小程序果然能正常運(yùn)行了……這個(gè)網(wǎng)銀助手真是令人蛋疼,你說(shuō)你如果需要這個(gè)dll文件慨代,完全可以把它放到你自己的安裝目錄下邢笙,根本沒(méi)必要放到系統(tǒng)目錄下,這不是給其他程序添亂嘛……
通過(guò)這個(gè)“事件”鱼响,至少讓我得到了兩點(diǎn)教訓(xùn):
- C:\Windows\System32 這個(gè)目錄非常重要鸣剪,在應(yīng)用程序鏈接dll時(shí),會(huì)優(yōu)先考慮 C:\Windows\System32 下的丈积,不管系統(tǒng)的path環(huán)境變量如何設(shè)置筐骇;
- 小心國(guó)產(chǎn)軟件,國(guó)產(chǎn)軟件往往缺乏“君子之道”江滨,總是往系統(tǒng)添加各種自己的“私貨”铛纬,能不裝就不裝。要使用國(guó)產(chǎn)軟件唬滑,最好從Microsoft Store中安裝告唆,至少這里面的軟件是被系統(tǒng)嚴(yán)格限制權(quán)限的。
打算重裝系統(tǒng)了晶密,因?yàn)椴恢绹?guó)產(chǎn)軟件還對(duì)系統(tǒng)做了什么“手腳”擒悬,這次要杜絕一切非Microsoft Store中的國(guó)產(chǎn)軟件!