为什么即使设置了/MT选项,我仍会看到MSVCR90依赖项? 我在Visual C++ 2008中构建了一个DLL,我想把运行时静态链接到DLL。因此,我进入项目选项并将运行时库设置为多线程(/MT)。这在过去一直适用于其他项目。但是,当我构建这一个时,我仍然会在列表中显示依赖项Walker MSVCR90.dll

为什么即使设置了/MT选项,我仍会看到MSVCR90依赖项? 我在Visual C++ 2008中构建了一个DLL,我想把运行时静态链接到DLL。因此,我进入项目选项并将运行时库设置为多线程(/MT)。这在过去一直适用于其他项目。但是,当我构建这一个时,我仍然会在列表中显示依赖项Walker MSVCR90.dll,c,visual-c++,visual-c++-2008,C,Visual C++,Visual C++ 2008,有人知道是什么原因吗?项目+属性、链接器、命令行。添加/verbose选项。构建+重建。“输出”窗口显示链接器搜索符号。请注意msvcrt.lib,它是对msvcr90.dll的依赖项 典型的原因是链接了一个.lib,该.lib包含一个或多个用/MD编译的.obj文件。对msvcrt.lib的依赖项被注入了#pragma comment(lib,msvcrt.lib)指令。这会告诉链接器搜索msvcrt.lib,而无需在链接器、输入、其他依赖项中将其明确指定为依赖项。显然,加载DLL的EXE不是

有人知道是什么原因吗?

项目+属性、链接器、命令行。添加/verbose选项。构建+重建。“输出”窗口显示链接器搜索符号。请注意msvcrt.lib,它是对msvcr90.dll的依赖项


典型的原因是链接了一个.lib,该.lib包含一个或多个用/MD编译的.obj文件。对msvcrt.lib的依赖项被注入了#pragma comment(lib,msvcrt.lib)指令。这会告诉链接器搜索msvcrt.lib,而无需在链接器、输入、其他依赖项中将其明确指定为依赖项。

显然,加载DLL的EXE不是使用相同的选项生成的。或者加载了另一个DLL,它只需要一个。@Hank:这里不适用。我在Dependency Walker中查看它,它显示在树的顶层,而不是另一个加载的DLL下。您的DLL依赖于
MSVCR90
中的哪些导出?谢谢,事实证明正是如此。