2013-09-23 47 views
6

Tôi cố gắng để chạy một chương trình tôi biên soạn trong Visual Studio 2013. Tuy nhiên, tôi nhận được lỗiMSVCP110D.dll và Visual Studio 2013

The program can't start because MSVCP110D.dll is missing from 
your computer. Try reinstalling the program to fix this problem. 

Đây không phải là một lỗi rất hữu ích. Tuy nhiên, sau khi một số Googling, tôi thấy rằng (rõ ràng) đang cố gắng để tải một thư viện chuẩn c++ động, và để làm được điều này, tôi cần phải chỉ định tùy chọn /MT thay vì tùy chọn /MD. Điều này khiến tôi có một số câu hỏi:

  1. Chính xác là làm gì?
  2. Lợi ích của /MD như trái ngược với /MT là gì? Ý tôi là, phải có lý do rằng đó là các tùy chọn mặc định ...
  3. Làm cách nào để tôi tìm kiếm .dll và sử dụng Visual Studio? Tôi đã tải xuống this, nhưng thành thật không biết chính xác cách sử dụng nó.
  4. Quan trọng nhất, làm thế nào để tôi nhận được lỗi đó để biến mất và chương trình của tôi chạy?

Một số thông tin bổ sung: Tôi đang biên dịch ở chế độ Release bằng cách sử dụng công cụ xây dựng x64.

+0

MSVCP110D.dll là một dll gỡ lỗi từ Visual Studio 2012 (trừ khi 2013 cũng giữ cùng một dll). – drescherjm

+0

Dự án ban đầu được xây dựng với VS2012. Tại sao nó vẫn đang được tìm kiếm bây giờ? – MirroredFate

+1

Bạn sẽ không tìm thấy dll này trong một redistributable kể từ khi gỡ lỗi dlls không redistributable. – drescherjm

Trả lời

14

Vấn đề là bạn đang trộn các phiên bản khác nhau của Visual Studio bằng cách sử dụng Qt được biên dịch bằng trình biên dịch khác. Hãy nhớ rằng mỗi phiên bản của Visual Studio sẽ có thời gian chạy/CRT của riêng nó. Các dll Qt đã được biên dịch với Visual Studio 2012 và sẽ phụ thuộc vào thời gian chạy Visual Studio 2012. Họ sẽ không sử dụng thời gian chạy năm 2013.

Giải pháp cho vấn đề này là biên dịch lại tất cả mã của bạn và các thư viện/thư viện phụ thuộc với cùng trình biên dịch.

Cảnh báo: Một số người dùng sẽ cố gắng chỉ cần cài đặt thời gian chạy động (hoặc biên dịch lại thư viện phụ thuộc với CRT tĩnh) từ các phiên bản khác của Visual Studio tuy nhiên điều này không phải là một giải pháp cho vấn đề này chủ yếu là bởi vì mỗi thời gian chạy có của nó riêng độc lập. Có đống riêng biệt có thể và sẽ dẫn đến các sự cố ngẫu nhiên gây ra do cấp phát bộ nhớ trong một heap và sau đó cố gắng giải phóng nó trong một đống khác. Kể từ khi đống không chia sẻ thông tin về phân bổ hoặc deallocations điều này dẫn đến có heaps tham nhũng. Từ kinh nghiệm của tôi, vấn đề không phải lúc nào cũng gây ra sự cố tức thì. Các vụ tai nạn có thể hoặc có thể không xảy ra trên phân bổ tiếp theo của đống tham nhũng để gỡ lỗi tình trạng này có thể rất bực bội.

+2

+1 để nhận xét về đống xung đột. – texnic

Các vấn đề liên quan