链接:致命错误LNK 1104:无法打开文件'LIBCMT.lib'

时间:2012-02-20 04:19:24

标签: c++ compilation

请帮助,我花了一整天时间尝试编译我的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'

在我的环境中,我设置了:

INCLUDE: 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

LIBPATH: C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ lib

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

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

8 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:10)

由于没有其他解决方案对我的情况有所帮助,因此在2018年末恢复了该线程:)

对于我来说,在为完全不相关的项目安装了 Windows驱动程序工具包之后,这个错误就开始出现了。

如果您不需要“减灾” (很可能不需要),并且看到此错误,则很有可能只需设置项目属性(属性页)- >配置属性-> C / C ++->代码生成->缓解幽灵已禁用

在所有项目中,Visual Studio工具的安装程序都将WDK神奇地设置为 Enabled ,即使它们与WDK无关,也没有为任何与驱动程序相关的东西选择Platform工具集。微软最好的。

答案 2 :(得分:3)

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

将项目移至新计算机时,在编译期间出现类似错误。我终于发现依赖项中的一个项目启用了幽灵缓解功能,并且默认情况下不包括具有该支持的库:

enter image description here

答案 3 :(得分:2)

当我得到这个时,这对我有用......

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

此示例的项目名称==“项目名称”。

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

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

这将打开一个长菜单。

在底部是“属性”点击它。

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

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

“解决方案”项目名称'属性页

关闭此窗口,右键单击解决方案,而不是项目,您需要右键单击项目名称。

在“项目名称”属性页

左侧面板展开配置属性

然后点击常规

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

将列表向下看“平台工具集

如果您使用的VS版本不是列出的版本,则需要更改它。

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

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

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

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

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

然后在“项目名称”属性页的底部点击应用,然后确定

现在尝试构建Project。

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

祝你好运迈克。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

VS2012开发人员命令提示符命令窗口运行cl.exe时出现同样的错误。事实证明我所要做的就是通过右键单击它并选择以管理员身份运行来重启命令提示符。

答案 6 :(得分:0)

右键单击 ProjectName (在 Solution Explorer 中)-> 属性-> 链接器-> 常规-> 其他图书馆目录,并进行如下设置:

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

答案 7 :(得分:0)

直接运行 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\