2011-11-21 29 views
11
  1. Mục đích của 'msvcr XXX .dll' và 'msvcp XXX .dll' là gì? Và sự khác nhau giữa msvc r và msvc p là gì?
  2. Tại sao tôi cần phải liên kết chúng với nhị phân của tôi nếu nó chỉ là một .dll rất đơn giản và không được quản lý? Có phải vì đó là một phần của mối liên kết? Tại sao nó không nằm trong thư mục hệ thống Windows theo mặc định như một thư viện chung?

Tôi chỉ cố gắng để hiểu tại sao trong Windows có somethings quá phức tạp ....Tại sao tôi cần gói phân phối lại trên mã không được quản lý? (msvcp100.dll)

Trả lời

27

msvcrXXXX.dll là DLL cho thư viện C runtime. msvcpXXXX.dll là DLL cho thư viện thời gian chạy C++.

Một hoặc cả hai phụ thuộc này sẽ được thêm vào nhị phân nếu bạn đang xây dựng bằng/MD hoặc/MDd, là các mặc định được chỉ định bởi Visual Studio khi bạn tạo dự án C++ mới. Việc sử dụng một trong hai cờ này chỉ ra rằng bạn muốn chương trình của bạn liên kết với phiên bản DLL của thời gian chạy C/C++. Bạn có thể thay đổi các giá trị mặc định trong thuộc tính Project-> Configuration Properties-> C/C++/Code Generation/Runtime Library.

Nếu bạn thay đổi dự án để sử dụng/MT hoặc/MTd, thì ứng dụng của bạn sẽ không tạo tham chiếu đến một trong các DLL được liệt kê ở trên, vì thời gian chạy C/C++ sẽ được liên kết trực tiếp với chương trình của bạn. Đối với hầu hết các chương trình đơn giản, điều này sẽ không gây ra bất kỳ vấn đề nào. Tuy nhiên, nếu chương trình của bạn bị chia thành nhiều DLL, tất cả đều được xây dựng bằng cách sử dụng những lá cờ này, thì mỗi DLL sẽ duy trì một bản sao của các hàm CRT được tham chiếu và dữ liệu tĩnh, và bạn có thể gặp vấn đề về cấp phát/giải phóng bộ nhớ. Để tránh những điều này, bạn cần đảm bảo rằng các đối tượng được cấp phát trong một DLL đã cho cũng được giải phóng trong cùng một mô-đun đó. Nói chung, sử dụng cờ/MD và/MDd hiệu quả hơn đối với các ứng dụng có nhiều mô đun (DLL), vì tất cả các mô-đun này sẽ chia sẻ một bản sao của các thư viện thời gian chạy C/C++ và các liên kết của chúng. cấu trúc dữ liệu trong quá trình ứng dụng.

Đối với các ứng dụng đơn giản, đơn mô-đun, mặc dù, cảm thấy tự do để xây dựng bằng cách sử dụng/MT hoặc/MTd.

+1

Giải thích hay. –

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