27

谁能为我解释一下 /clr 如何以及为什么与 /mtd 不兼容?有什么替代方案?如果我使用 /md 或 /mdd 在内部会发生什么?

据我所知,我们不会同时使用 /clr 和 /mtd。有人可以解释是否有办法做到这一点?请解释一下 /clr 如何以及为什么与 Visual Studio 中的 /mt 和 /mtd 不兼容?

4

1 回答 1

24

我希望这里给出线索:

如果您使用 /clr 编译器开关,您的代码将与导入库 msvcmrt.lib 链接。导入库引用了一个新库 msvcm80.dll,它提供了托管代码和本机 CRT 之间的代理。您不能将静态链接的 CRT(/MT 或 /MTd 选项)与 /clr 一起使用。请改用动态链接库(/MD 或 /MDd)。

/clr 标志使您的代码引用新的 dll msvcm80.dll - 它充当托管代码和 CRT 之间的代理。很难准确地说出这个代理的作用,但我猜它充当了托管堆上分配、垃圾收集、托管线程等的接口。如果您链接 CRT 的静态版本,则代理将无法拦截您对运行时库的调用。

于 2009-06-02T09:52:11.997 回答