为什么 Visual Studio 中的 /clr 与 /mt 和 /mtd 不兼容?
有人可以帮我解释一下 /clr 与 /mtd 不兼容的方式和原因吗? 有什么替代方案吗? 如果我使用 /md 或 /mdd ,内部会发生什么?
据我所知,我们不会结合使用 /clr 和 /mtd。 有人可以解释是否有办法做到这一点吗? 请解释一下 Visual Studio 中 /clr 与 /mt 和 /mtd 不兼容的方式和原因?
can anybody please explain for me how and why /clr is incompatible with /mtd ?
What is the alternative for this? What happens internally if I use /md or /mdd ?
As far as I know we don't combinedly use /clr and /mtd. Can someone explain if there is a way to do this? And please explain me how and why /clr is incompatible with /mt and /mtd in Visual Studio?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我希望此处给出线索:
/clr 标志使您的代码引用新的 dll msvcm80.dll - 这充当托管代码和 CRT 之间的代理。 很难确切地说出这个代理的作用,但我猜它充当托管堆上的分配、垃圾收集、托管线程之类的接口。 如果链接 CRT 的静态版本,则代理将无法拦截您对运行时库的调用。
I expect the clue is given here:
The /clr flag causes your code to reference a new dll msvcm80.dll - this acts as a proxy between your managed code and the CRT. It's difficult to say exactly what this proxy does, but I guess it acts as an interface for allocations on the managed heap, garbage collection, managed threads and that kind of thing. If you link the static versions of the CRT, then the proxy would not be able to intercept your calls to the runtime libraries.