Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 12
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi not found msvcp80d.dll trong VC2k5

    VC2k5 của mình rất hay bị lỗi msvcp80d.dll no found,phải chuyển sang release mới run được. Đã thử 1 số cách nhưng được mấy hôm lại bị lại.Mọi người có cách nào không,giúp mình với [IMG]images/smilies/Cry.gif[/IMG] [IMG]images/smilies/Cry.gif[/IMG] [IMG]images/smilies/Cry.gif[/IMG] [IMG]images/smilies/Cry.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chắc là lỗi do cài đặt (xài expess 2k5 cũng hay bị cái này.)

    Một số trường hợp cũng bị lỗi này đó.

    Cậu download file mà tớ attach ở dưới rồi copy vào vị trí:

    Mã:
    C:\Program Files\Microsoft Visual Studio 8\VC
    edist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT
    Thế là OK!

    Với lỗi nảy sinh khi code với MFC thì extract mấy thư viện này vào vị trí:

    Mã:
    C:\Program Files\Microsoft Visual Studio 8\VC
    edist\Debug_NonRedist\x86\Microsoft.VC80.DebugMFC
    Là OK!

    Sau khi cho file vào mà khi Run ở Debug mà nó báo không thấy linker thì add linker vô vị trí của Manifest tools
    Mã:
    Menu: Project => Project Properties => Manifest Tools => Input & Output => Embed Manifest.
    
    Chọn YES.
    
    Kiểm tra bên Linker:
    Project Properties => Linker => Manifest File 
    
    Chọn YES
    Sau đó Restart Computer là xong !

    Chú ý: Nếu mà sau khi setup VS2k5 mà run thêm cái: vcredist_x86.exe <=== cũng sẽ nảy sinh cái lỗi ở trên [IMG]images/smilies/biggrin.png[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đúng như Meo nói,cái msvcp80d.dll vẫn tồn tại trong thư mục mà X nói.
    Đã kiểm tra manifest tool rồi,mọi thứ đều bình thường.
    Mình đã cài lại VC mấy lần,được mấy hôm lại bị lại.
    Làm theo cách của Meo cũng chỉ đc mấy hôm [IMG]images/smilies/21.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Đang ở
    24 Rạch Bùng Binh , P10,Q3 , HCM
    Bài viết
    0
    Uhm, mình cũng bị hoài. Nhưng từ khi update lên sp1 thì đỡ hơn một chút. Cái này chắc là bug của vc2k5 quá.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình dùng bản team suite 2k5.Không biết bản 2k8 express có hay bị thế không?chắc xài 2k8 express quá[IMG]images/smilies/waiting.gif[/IMG]

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    các bạn ơi !mình xài MV 2008 pro mà mình copy mấy cái file đó vào rồi mà vẫn như thế !mình phải làm sao giờ!
    mình lên mạng kiếm mà không ra được gì hữu ích!
    mấy ngày sau là phải nộp bài rồi!
    vậy là phải lập trình chay à! giúp mình với ! hu hu hu!

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn vào đây xem nè : Cách khắc phục lỗi không tìm thấy MSVCR80D.dll

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cách của Xcross87 không có tác dụng gì cả vì hệ thống không bao giờ tìm đến các dll này trừ phi ta đặt file exe vào trong cùng thư mục.

    Thư mục redist trong VC là nhằm mục đích khi cần ứng dụng có thể copy vào thư mục local của mình để tiến hành cài đặt sử dụng assembly theo kiểu private assembly.
    Mình cũng gặp trường hợp tương tự như dieucay555 khi chạy release mà được nhưng debug thì không.

    Trường hợp của dieucay555 theo mình hãy thử kiểm tra xem file msvcp80d.dll (thư viện debug của C++ STL) có nằm trong thư mục WinSxS hay không.
    Nếu có tồn tại thì vấn đề có thể nằm trong file manifest. Bắt đầu từ VC++ 2k5 trở đi, các ứng dụng sẽ hoàn toàn tìm kiếm dll dựa theo mô tả trong file manifest. File manifest này sẽ mô tả các dll hay assembly mà ứng dụng cần đến.
    Chẳng hạn với một ứng dụng biên dịch debug thì ta có thể xem file manifest này để xem nó mô tả các dll nó cần đến là gì:

    Mã:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>
      </dependency>
    </assembly>
    Để đọc file manifest của 1 dll hay exe nào đó viết bằng VC++ các bạn chỉ cần mở file đó ra trong trình IDE và mở nhãn RT_MANIFEST
    Nếu file manifest không đuợc nhúng trong file exe thì tên file manifest sẽ trùng với tên của ứng dụng biên dịch cộng thêm đuôi .manifest.
    Như mọi người đã thấy, trong mục <dependency> (lệ thuộc) ứng dụng viết ra đang lệ thuộc vào một assembly có tên là Microsoft.VC80.DebugCRT và phiên bản là 8.0.50727.4053 (phiên bản RTM)
    Assembly đó sẽ chứa các file dll debug của thư viện C (msvcr80d.dll) và C++(msvcp80d.dll).
    Và assembly đó sẽ được hệ thống tìm kiếm dựa theo thứ tự sau:
    • Tìm trong thư mục Windows\WinSxS assembly do file manifest mô tả theo đúng phiên bản.
      Trong thư mục WinSxS thì cấu trúc của thư mục assembly có dạng là [processorArchitecture]_[assembly name]_[publicKeyToken]_[version]
      Chú ý rằng publicKeyToken phải khớp với publicKeyToken mô tả trong file manifest.
      Ví dụ như trong thư mục WinSxS mình có thư mục sau: x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727. 4053_x-ww_e6967989
      Mình thấy ngay assembly này là của VC++ 2005 RTM (phiên bản 8.0.50727.4053) chạy trên CPU x86Nếu không tìm thấy trong thư mục đó, hệ thống sẽ dò đến thư mục local chứa file chạy chương trình để tìm đến assembly nói trên theo trình tự sau:
      • \\<appdir>\<assemblyname>.DLL\\<appdir>\<assemblyn ame>.manifest\\<appdir>\<assemblyname>\<assemblyna me>.DLL\\<appdir>\<assemblyname>\<assemblyname>.ma nifest

    Thư mục chứa assembly sẽ có tên giống với tên của assembly, trong thư mục đó thì sẽ chứa file manifest mô tả assmebly đó và các dll của assembly đó.
    Ngoài ra hệ thống có thể dò tìm assembly dành riêng cho một ngôn ngữ vùng miền nào đó (Mỹ, Pháp, Anh....) nhưng ở đây mình sẽ không xét đến
    Và nếu tiếp tục không tìm thấy, hệ thống sẽ báo lỗi.
    Với hệ điều hành không hỗ trợ side by side assembly thì hệ thống tìm như mặc định dll ở các nơi đăng kí trong biến Enviroment Variable và thư mục cài windows (bao gồm cả System32).
    Khi đưa ra ý tưởng về side by side assembly, mục đích của đội ngũ VC++ là giảm thiểu khả năng dẫn đến DLL hell khi mà một dll mới thay dll cũ có thể khiến cho các ứng dụng dựa vào dll cũ chạy không còn chính xác và ổn định, hoặc sinh lỗi.

    Với ý tưởng dựa vào file manifest thì giờ đây các dll phiên bản khác nhau sẽ có thể cùng cài vào trong một máy và ứng dụng sử dụng manifest sẽ chỉ rõ nó cần đến dll phiên bản nào và hệ thống sẽ tìm dll phiên bản đó chứ không phải là dll mới nhất.

    Trở lại trường hợp của mình, máy mình không chạy được vì một điều khá thú vị. Mặc dù máy mình đã nâng cấp thành VC++ 2005 SP1 (phiên bản 8.0.50727.762) nhưng không hiểu sao khi biên dịch debug, linker của VS 2005 vẫn nhúng file manifest trong đó yêu cầu sử dụng assembly Microsoft.VC80.DebugCRT phiên bản RTM (8.0.50727.4053). Và khi hệ thống dò đến thư mục WinSxS, nó không thể tìm thấy assembly này, mặc dù có assembly debug phiên bản mới hơn là Microsoft.VC80.DebugCRT 8.0.50727.762.
    Một điều thú vị khác nữa là phiên bản debug Microsoft.VC80.DebugCRT (8.0.50727.4053) thì máy mình không có, trong khi phiên bản release Microsoft.VC80.CRT của mình lại có.
    Và khi nó quay về tìm trong thư mục local, nó cũng không tìm thấy nên nó báo lỗi. Phiên bản release không sao vì nó assmembly của phiên bản RTM Microsoft.VC80.CRT (8.0.50727.4053) của mình thì tồn tại.

    Và mình đã sửa nó bằng cách mình vào thư mục Program Files\Microsoft Visual Studio 8\VC
    edist\Debug_NonRedist\x86\Microsoft.VC80.Deb ugCRT. Trong thư mục này có chứa assembly debug của VC++ 2005 phiên bản RTM, mình copy nó vào thư mục local chưa file chạy của mình. Và thế là mình lại debug được, mặc dù hơi bất tiện.

    Vấn đề của dieucay555 có thể không hoàn toàn giống của mình nhưng mình hy vọng khi đưa ra hiểu biết của mình về side by side assembly, biết đâu một số bạn gặp phải lỗi này có thể sửa được.

    Thông tin về trình tự tìm kiếm assembly nằm ở đây: http://msdn.microsoft.com/en-us/library/aa374224(VS.85).aspx

    mình đính chính lại bài viết của mình
    Phiên bản VC++ 2005 RTM là 8.0.50727.42.
    Phiên bản 8.0.50727.727 nhiều khả năng là do các bản update lỗi của VC++ 2005 hoặc khi cài Windows SDK
    Phiên bản VC++ 2005 SP1 là 8.0.50727.4053.

    Vậy nên lỗi mình đã gặp phải thực ra là phiên bản debug của SP1 không rõ làm sao mà biến mất khỏi WinSxS.

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình làm theo cách mấy bạn chỉ rồi, mà máy vẫn báo lỗi ấy, có ai có cách khác hiệu quả hơn không chỉ mình với, thanks nhìu

  10. #10
    Bạn thử Clean và Build lại xem

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •