有人可以帮我解释一下/为什么/ clr与/ mtd不兼容? 有什么替代方案?如果我使用/ md或/ mdd会在内部发生什么?
据我所知,我们没有合并使用/ clr和/ mtd。有人可以解释是否有办法做到这一点?请解释我如何以及为什么/ clr与Visual Studio中的/ mt和/ mtd不兼容?
答案 0 :(得分:22)
我希望线索是here:
如果您使用的是/ clr编译器 切换,你的代码将链接 导入库,msvcmrt.lib。该 导入库引用一个新的 库,msvcm80.dll,它提供了一个 您的托管代码和。之间的代理 原生CRT。你不能使用 静态链接的CRT(/ MT或/ MTd 选项)/ clr。使用 动态链接库(/ MD或 / MDd)代替。
/ clr标志会导致您的代码引用新的dll msvcm80.dll - 它充当托管代码和CRT之间的代理。很难准确地说出这个代理的作用,但我猜它可以作为托管堆,垃圾收集,托管线程等分配的接口。如果您链接CRT的静态版本,那么代理将无法拦截您对运行时库的调用。