为什么 Visual Studio 中的 /clr 与 /mt 和 /mtd 不兼容?

发布于 2024-07-24 04:28:35 字数 194 浏览 6 评论 0原文

有人可以帮我解释一下 /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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

檐上三寸雪 2024-07-31 04:28:35

我希望此处给出线索

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

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

I expect the clue is given here:

If you are using the /clr compiler
switch, your code will be linked with
an import library, msvcmrt.lib. The
import library references a new
library, msvcm80.dll, which provides a
proxy between your managed code and
the native CRT. You cannot use the
statically linked CRT ( /MT or /MTd
options) with /clr. Use the
dynamically-linked libraries (/MD or
/MDd) instead.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文