【问题标题】:Does the "/MT" switch remove the need for vc runtime?“/MT”开关是否消除了对 vc 运行时的需求?
【发布时间】:2015-03-06 01:12:30
【问题描述】:

我正在使用 /MT 开关编译我的 VS 2012 DLL。

这是否意味着我不必重新分配 VC 运行时 (vcredist)?

我问是因为我的 DLL 无法在干净的 XP SP3 客户端计算机上注册。如果我分发 VC 2012 运行时,它可以工作。

我认为 /MT 开关将不再需要它。 我误会了吗?

【问题讨论】:

    标签: visual-c++ visual-studio-2012 dll dependencies vcredist


    【解决方案1】:

    /MT 应该将您的代码链接到静态运行时。但是,这并不一定意味着您没有链接到需要动态运行时的其他库。您可以使用dumpbin /imports 来查看它是否真的需要运行您的程序。自 2010 年以来,我还没有真正使用过 Visual Studio,但 dumpbin 仍应在某处提供。

    【讨论】:

    • Dumpbin 告诉我,我的 DLL 使用以下导入:Kernel32.dll、user32.dll、advapi32.dll、shell32.dll、ole32.dll、oleaut32.dll。这是否意味着理论上它应该与部署 vcredist 一起工作?
    • 仍有可能您引用的符号在 XP 的某个共享库中不存在。如果它不起作用,那么可能缺少一些东西。 TBH,快速深入了解的最佳方法是在 XP 框上运行依赖项遍历器。查找depends.exe 的副本。它将加载您的 DLL 并突出显示所有丢失的符号。
    • 谢谢,我会试试的。但是,如果我的 DLL 没有引用除我提到的符号之外的任何其他符号,您能否确认我理论上不再需要 vcredist?您说它“将您的代码与静态运行时链接”。那么 VC2012-runtime 然后编译到我的 DLL 中了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2010-10-19
    • 2012-01-19
    • 2016-11-25
    • 2012-12-01
    • 2013-07-16
    相关资源
    最近更新 更多