gpt4 book ai didi

c++ - 我应该选择哪个 VC++ 运行时版本——静态还是动态?

转载 作者:太空狗 更新时间:2023-10-29 21:30:52 25 4
gpt4 key购买 nike

我正在开发一个 64 位进程内 VC++ ATL COM 服务器,它基本上只是将所有调用重定向到进程外 COM 服务器。所以我的 COM 服务器基本上什么都不做。

最初它在 DLL 中使用 C++ 运行时(/MD 编译器开关)。我注意到,当我在干净的 64 位 Win2k3 上部署它时,regsvr32 失败并出现错误:LoadLibrary({fileName}) failed – This application has failed to start because the application configuration is incorrect.重新安装应用程序可能会解决此问题。

Google 帮助 - 问题是未安装 VC++9 运行时。即使 msvcr90.dll 与我的 COM 服务器位于同一目录中,问题仍然存在。我猜这是因为搜索依赖库的工作方式 - 它不会查看同一目录,我需要 Windows\System32 或类似目录中的 msvcr90.dll。由于这对我的部署来说很复杂,所以我转而使用静态链接的 C++ 运行时(/MT 编译器开关)。现在它部署得很好。 .dll 文件的大小仅为 110k(原为 45k),所以我不介意。

现在我听说过很多关于在一个进程中混合使用不同版本的 C++ 运行时是多么糟糕的事情——CRT 状态可能会被破坏, hell 可能会崩溃等等。我是否必须考虑这一点并预料到将/MD 更改为/MT 会出现问题,尤其是因为我不知道 COM 服务器消费者使用的是什么版本?

最佳答案

据我所知,自 VS2005 以来,静态运行时在 VS 中已被弃用。

问题是 Visual C 运行时是一个并排的 dll。也就是说,它必须从 c:\windows\winsxs 目录加载。这就是为什么将它放在同一目录中不再有效的原因。

正确的解决方案是在客户端系统上安装正确的 CRT 可再发行组件。

参见 http://msdn.microsoft.com/en-us/library/ms235316.aspx了解更多信息

这可能是正确的可再发行组件: http://www.microsoft.com/downloads/details.aspx?familyid=BD2A6171-E2D6-4230-B809-9A8D7548C1B6&displaylang=en

安装正确的会将运行时 dll 放置在 winsxs 目录中。

关于c++ - 我应该选择哪个 VC++ 运行时版本——静态还是动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1706762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com