2011-06-18 28 views
5

Tôi đang xây dựng một DLL trong Visual C++ 2008, và tôi muốn có thời gian chạy tĩnh liên kết vào DLL. Vì vậy, tôi đã đi vào các tùy chọn dự án và thiết lập Thư viện thời gian chạy đến Multi-threaded (/MT). Điều này đã luôn luôn làm việc cho các dự án khác trong quá khứ. Nhưng khi tôi xây dựng này, tôi vẫn kết thúc với Dependency Walker hiển thị MSVCR90.dll trong danh sách.Tại sao tôi thấy phụ thuộc MSVCR90 mặc dù tôi đã đặt tùy chọn/MT?

Bất kỳ ai biết điều gì có thể gây ra điều đó?

+2

Rõ ràng EXE tải DLL của bạn không được xây dựng với cùng một tùy chọn. Hoặc một DLL khác đã được tải, nó chỉ mất một. –

+0

@Cảm ơn: Không áp dụng tại đây. Tôi đang nhìn vào nó trong Dependency Walker, và nó cho thấy ở cấp cao nhất của cây, không phải dưới một DLL nạp. –

+1

Xuất (s) nào trong 'MSVCR90' là DLL của bạn phụ thuộc vào? –

Trả lời

4

Project + Properties, Linker, Command Line. Thêm tùy chọn/verbose. Xây dựng + Xây dựng lại. Cửa sổ Output hiển thị cho bạn linker tìm kiếm các ký hiệu. Xem ra cho msvcrt.lib, đó là một trong đó kéo trong sự phụ thuộc vào msvcr90.dll

Nguyên nhân điển hình là liên kết một .lib có một hoặc nhiều tệp .obj được biên dịch với/MD. Một phụ thuộc vào msvcrt.lib được tiêm với chỉ thị #pragma comment (lib, msvcrt.lib). Điều đó yêu cầu trình liên kết tìm kiếm msvcrt.lib mà không chỉ định rõ ràng nó như là một phụ thuộc trong Linker, Input, Additional Dependencies.

+0

Cảm ơn, điều đó hóa ra chính xác nó là gì. –

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