编译 VS 2012 C++ 项目时出现致命错误无法运行“mt.exe”

Posted

技术标签:

【中文标题】编译 VS 2012 C++ 项目时出现致命错误无法运行“mt.exe”【英文标题】:Fatal error cannot run 'mt.exe' at compiling VS 2012 C++ project 【发布时间】:2013-09-29 15:12:11 【问题描述】:

我将 Visual Studio 升级到 VS Professional 2012。

构建旧的 Visual C++ 项目导致错误:

LINK:致命错误 LNK1158:无法运行“mt.exe”

将带有 mt.exe 的文件夹放入路径没有帮助。 目前我在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64 文件夹中使用 mt.exe

【问题讨论】:

【参考方案1】:

在链接器中将“生成清单”设置为否。这有帮助

【讨论】:

【参考方案2】:

正如fatal error LNK1158: cannot run 'mt.exe' 所述,有时关闭清单生成不是一种选择,因为实际上是在使用清单。 在这一点上,人们回到解决实际问题。

实际问题的一个原因是可执行文件搜索路径错误。 我个人曾经在项目文件(VC++ 目录→项目设置中的可执行目录)中有一个$(ExecutablePath) 的设置,它产生了一个可执行的搜索路径,其中一个路径名不是有效的目录名。 路径名在其目录名组件之一中有一个冒号(由 ..\..\ 前缀到另一个变量,该变量恰好包含一个带有驱动器号的绝对路径名,而不是预期的相对路径名)。

在合理的世界中,仅由错误/丢失目录引起的路径搜索错误会导致路径名被跳过,搜索继续到搜索路径中的下一个路径名。 相比之下,link 会因此错误而失败(midl 在尝试查找 cl.exe 时确实如此)。 当您查看搜索路径(构建输出级别设置为“详细”)并看到包含mt.exe 的SDK 目录就在其中时,这是非常令人困惑的,就像白天一样。 看来link 并不生活在一个理智的世界里。 ☺

当然,修复是纠正错误的项目设置。

【讨论】:

以上是关于编译 VS 2012 C++ 项目时出现致命错误无法运行“mt.exe”的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 makefile 编译 C++ 程序时出现“致命错误:boost/regex.hpp:没有这样的文件或目录”

在 Visual Studio 2012 中编译启用 CLR 的 C++ 项目时出现 C2248 错误

在 Windows 中编译 Qt 时出现致命错误

在 VS 2008 上启动 OpenCV 2.4.6 时出现致命错误,找不到文件

尽管有一次编译指示,VS2012 仍抱怨“已定义”类

尝试编译opengl项目时出现c ++未定义的引用错误