Почему я вижу зависимость MSVCR90, хотя я установил параметр /MT?

Я создаю DLL в Visual C++ 2008 и хочу, чтобы среда выполнения была статически связана с DLL. Поэтому я зашел в параметры проекта и установил для библиотеки времени выполнения значение Multi-threaded (/MT). Это всегда работало для других проектов в прошлом. Но когда я создаю этот, я все равно получаю Dependency Walker, показывающий MSVCR90.dll в списке.

Кто-нибудь знает, что может быть причиной этого?


person Mason Wheeler    schedule 18.06.2011    source источник
comment
Очевидно, что EXE-файл, который загружает вашу DLL, не был создан с той же опцией. Или другая DLL, которая была загружена, требуется только одна.   -  person Hans Passant    schedule 18.06.2011
comment
@Хэнк: здесь не применимо. Я просматриваю его в Dependency Walker, и он отображается на верхнем уровне дерева, а не в другой загруженной DLL.   -  person Mason Wheeler    schedule 18.06.2011
comment
От какого экспорта в MSVCR90 зависит ваша DLL?   -  person Michael Burr    schedule 18.06.2011


Ответы (1)


Проект + свойства, компоновщик, командная строка. Добавьте параметр /verbose. Построить + восстановить. Окно вывода показывает вам, как компоновщик ищет символы. Остерегайтесь msvcrt.lib, это тот, который вызывает зависимость от msvcr90.dll.

Типичной причиной является связывание библиотеки .lib с одним или несколькими файлами .obj, скомпилированными с параметром /MD. Зависимость от msvcrt.lib внедряется директивой #pragma comment(lib, msvcrt.lib). Это говорит компоновщику искать msvcrt.lib без явного указания его в качестве зависимости в Linker, Input, Additional Dependencies.

person Hans Passant    schedule 18.06.2011
comment
Спасибо, оказалось именно так. - person Mason Wheeler; 18.06.2011