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

msk*_*app 13 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;
}
Run Code Online (Sandbox Code Playgroud)

你可以看到我试图使用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'
Run Code Online (Sandbox Code Playgroud)

在我的环境中我设置:

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文件或目录中的任何内容.

有人请告诉我如何才能做到这一点?

Ale*_*mer 15

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

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

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

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

  • 万分谢意。它有效,我想知道您是如何得出这个结论的?:) (3认同)

mrs*_*een 11

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

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


Wil*_* Am 5

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

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

在此处输入图片说明