| adm | Find | login register |
caleb joined: 2007-09-22 posted: 630 promoted: 134 bookmarked: 90 |
原文:http://developers.slashdot.org/story/09/10/04/1956225/Side-By-Side-Assemblies-Bring-DLL-Hell-20 +-Developers: "Side By Side Assemblies" Bring DLL Hell 2.0neutrino38 writes"This is an alert for all developers using Microsoft Visual Studio 2005. At the beginning of January, Microsoft issued a security fix for Visual Studio 2005 forcing the use of new dynamic libraries (DLLs) by all applications compiled with this IDE. Basically, applications compiled with Visual Studio 2005 will not work anymore on an ordinary (non-dev) PC unless the newer DLLs are installed. And we found out that this is true on fully updated PCs. I just posted some detailsand some suggested fixes."Read below for some more background on Microsoft's so-called "side by side assemblies." For those unfamiliar with the Microsoft world, native microsoft applications written in C++ rely on dynamic libraries. Two of them are infamous: MSVCRT.DLL and MFCxx.dll. Because of software evolution and security fixes, multiple versions of these DLLs were often present in the system, causing application instability. Where Linux implemented a simple suffix notation on the dynamic libraries, Microsoft created a new beast in 2001: the Side By Side assembly. These are basically DLLs with a companion XML file that identifies them. The XML file contains a digital signature and when the system binds these DLLs dynamically to an application, it checks that the signature of the DLL matches the DLL itself. When everythings runs well, this is pretty transparent. But when issues arise, it becomes excruciatingly difficult to troubleshoot and fix. DLL hell is not over.
edited: 1
| |||||||
eliu joined: 2007-08-09 posted: 11478 promoted: 617 bookmarked: 187 新竹, 台灣 |
Windows .dll 的問題真的可以搞很久,讓人頭痛的問題。 真的不行只好 compile 成 Mt,也就是 static link 的方式,只是 .EXE 會比較大。 目前 .gcin 還是 compile 成 MD,也就是 DLL 的方式,試起來好像 OK。 | |||||||
企鵝狂 joined: 2008-04-01 posted: 185 promoted: 20 bookmarked: 7 |
我用的是2008。 我的經驗是,過去如果找不到 .dll 會跟你說這個應用程式無法執行,因為找不到必須的dll, VBRun400.dll 之類的。 side-by-side dll找不到的話,會直接說應用程式發生錯誤, 然後要去系統管理員裡面看log看半天,還要把執行檔的manifest叫出來看他到底少什麼dll才可以解決。 通常是編譯成 debug 版本他就會跟 MSVCRTD.dll 連結,但是一般電腦沒有這種D的dll。這時候就去弄成release版本應該就沒有問題了。
http://www.dependencywalker.com/ 這個dll工具我覺得蠻好用的。 |
| adm | Find | login register |