【问题标题】:LINK: fatal error LNK 1104: cannot open file 'LIBCMT.lib'链接:致命错误 LNK 1104:无法打开文件 'LIBCMT.lib'
【发布时间】:2012-03-10 11:58:16
【问题描述】:

请帮忙,我花了一整天的时间来编译我的 c++ 应用程序。

我的项目包含一个源文件:Foo.cpp。这是它的代码:

#include <jni.h>
#include <com_Foo.h>

JNIEXPORT jint JNICALL Java_com_Foo_add
(JNIEnv * env, jobject obj, jint x, jint y)
{
    return x+y;
}

如您所见,我试图使用 JNI,但我认为这与问题无关。这是我在命令行上尝试的:

C:\Users\michael\cworkspace\foo>cl -LD Foo.cpp -FeFoo.dll
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Foo.cpp
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/dll
/implib:Foo.lib
/out:Foo.dll
Foo.obj
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'

在我的环境中我设置了:

包括: C:_\include;C:\frankenstein\includes;C:\Program Files\Java\jdk1.6.0_24\include;C:\Program Files\Java\jdk1.6.0_24\include\win32;C:_\include \win32;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include

库路径: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib

我检查了 lib 目录,它包含一个“libcmt.lib”文件。不知道它是否区分大小写,但我知道我从未更改过 Visual Studio 文件或目录中的任何内容。

有人能告诉我如何完成这项工作吗?

【问题讨论】:

  • 顺便说一句,这个文件存在于我的驱动器上:C:_\include\com_Foo.h,对 libcmt 的依赖必须间接来自 jni.h 包含。
  • 我认为这可能源于没有在 Visual Studio 中创建代码,而是尝试使用它的编译器。我在 Code::Blocks 中创建了应用程序,当我无法使 MinGW32 g++ 编译器工作时,我尝试使用 Visual Studio 编译器。也许它假设了某种项目配置。 Visual Studio编译器是否可能仅在项目在Visual Studio中构建时才有效?
  • 这可能是一个相当古老的线程,但由于我现在遇到它,我认为它可能有用。 @mrsheen 下面的答案对我有用,但我必须从开发人员 cmd 运行程序,而不是正常运行程序(错误仍然存​​在)。仅供可能仍在寻找此功能的人参考。

标签: c++ compilation


【解决方案1】:

在 2018 年末恢复此线程,因为其他解决方案都没有帮助我的情况:)

对我来说,在我为一个完全不相关的项目安装 Windows Driver Kit 后,这个错误开始突然出现。

如果您不需要 "Spectre Mitigation"(您很可能不需要)并且看到此错误,您很可能只需要设置 Project Properties(属性页面) - > 配置属性 -> C/C++ -> 代码生成 -> Spectre 缓解禁用

神奇的是,它在所有项目中被用于 WDK 的 Visual Studio 工具的安装程序设置为 Enabled,即使它们与 WDK 无关,也没有为任何与驱动程序相关的东西选择平台工具集。微软处于最佳状态。

【讨论】:

  • 太好了,谢谢。它有效,我想知道你是如何得出这个结论的? :)
  • @CEOatApartico 我没有……这更像是反复试验。我想我已经花了几天时间尝试这些东西,突然间我注意到了一些我以前从未见过的东西。所以我试图禁用它:)
  • 对我们来说没有那么痛苦 :)
  • 这应该被标记为答案,拯救了我的一天,非常感谢!
  • @nOne 很高兴它对你有用。我认为我的答案是针对一个比 OP 所遇到的新问题 :) 无论哪种方式,很高兴看到它对人们有所帮助。
【解决方案2】:

我怀疑您用来运行编译器的命令提示符没有定义所有必需的环境变量。

为确保命令行环境配置正确,请确保您已运行vsvars32.bat 批处理文件。

【讨论】:

  • 这并不能解决问题。在我的系统上,除非我先运行 vsvars32.bat,否则 cl 不起作用。我仍然得到错误。
  • 这解决了我的问题!谢谢!
【解决方案3】:

只是在这里添加我的经验,因为它可能对某人有所帮助,并且适用于较新的 VS 版本(在我的情况下为 2017 年)。

当我将项目移动到新机器时,我在编译过程中遇到了类似的错误。我终于发现我的依赖项中的一个项目启用了幽灵缓解,并且默认情况下不包含具有该支持的库:

【讨论】:

  • 是的,这也是为我解决的问题。 /QSpectre 标志现在默认启用,但默认情况下它不安装 Spectre 缓解库。奇怪的默认选择,但运行安装程序并检查此选项为我解决了这个问题。
【解决方案4】:

这对我有用……

fatal error LNK1104: cannot open file 'LIBCMT.lib'

您的项目名称 == 本示例中的“项目名称”。

转到您的项目的“解决方案资源管理器”窗口。

右键单击项目“项目名称”,而不是解决方案“项目名称”。

这将打开一个长菜单。

在底部是“Properties”点击它。

这将打开“项目名称”属性页窗口。

如果窗口名称(左上角)显示...

“解决方案‘项目名称’属性页

关闭这个窗口,你右键点击的是Solution,不是项目,你需要右键项目名称。

在“项目名称”属性页上

左侧面板展开配置属性

然后点击常规

现在右侧面板应显示您当前项目的“常规”配置属性。

在列表中查看“平台工具集

如果您使用的 VS 版本不是您需要更改的版本。

要更改 VS 的版本,只需将鼠标指针放在显示的当前 VS 版本名称的末尾并单击即可。

该行右侧将显示一个带有向下箭头的框,单击它。

这将打开一个包含 VS 版本列表的窗口。

选择您现在使用的 VS 版本。

该窗口应该关闭,并且您的选择应该替换了我第一次构建时用于构建您的项目的旧项目 VS 版本。

然后在“Project Name”属性页的底部点击Apply,然后点击OK

现在尝试构建项目。

我希望这会有所帮助,它适用于我在处理使用早期版本的 VS 构建的项目时。

祝迈克好运。

【讨论】:

    【解决方案5】:

    右键单击 ProjectName(在 Solution Explorer 中)-> Properties -> Linker -> General -> Additional Library Directories 并将其设置为:

    $(SolutionDir)$(Platform)\$(Configuration)\;$(VCToolsInstallDir)\lib\$(PlatformShortName);$(VCToolsInstallDir)atlmfc\lib\$(PlatformShortName)
    

    【讨论】:

    • 这如何解决原来的问题?介意更深入吗?
    • 此代码通过 Visual Studio 宏设置 VC 构建工具的路径。与像 C:\Program Files\... 这样的硬编码相比,它使路径代码独立。如果安装了工具集,您只需在项目中设置它的路径。
    • 感谢 MicroPC John this answer 我已经解决了这个问题,你需要安装所有的幽灵库。 Vistual Studio Installer->Modify->Component->Any spectre lib
    【解决方案6】:

    在尝试在 Win10 上安装 rasPi Pico SDK 时刚刚遇到同样的错误(肯定是找不到 libcmt.lib),解决方案是运行vcvars64.bat,它(在我的安装中)位于: 在命令行上C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build,然后重新运行nmake。

    【讨论】:

      【解决方案7】:

      VS2012 的开发人员命令提示符 命令窗口运行 cl.exe 时,我遇到了同样的错误。结果我所要做的就是通过右键单击它并选择以管理员身份运行重新启动命令提示符。

      【讨论】:

        【解决方案8】:

        直接运行 cl.exe 需要设置指向库和工具的环境变量。要了解需要安装哪些变量以及它们的值应该是什么,我建议安装Microsoft Visual C++ Compiler for Python 2.7。它将命令提示符添加到开始菜单中,自动加载所需的环境变量。

        运行提示符后,运行set查看所有环境变量。

        例子:

        LIB=C:\Users\JBeach\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Lib;C:\Users\JBeach\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\WinSDK\Lib;
        LIBPATH=C:\Users\JBeach\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Lib;C:\Users\JBeach\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\WinSDK\Lib;
        PROCESSOR_ARCHITECTURE=x86
        PROCESSOR_ARCHITEW6432=AMD64
        VCINSTALLDIR=C:\Users\JBeach\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\
        WindowsSdkDir=C:\Users\JBeach\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\WinSDK\
        

        【讨论】:

          猜你喜欢
          • 2020-02-18
          • 2011-09-07
          • 2011-06-23
          • 2017-11-29
          • 2014-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多