LINK: фатальная ошибка LNK 1104: невозможно открыть файл 'LIBCMT.lib'

Пожалуйста, помогите, я потратил весь день, пытаясь скомпилировать приложение на С++.

Мой проект содержит один исходный файл: 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

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

Я проверил в каталоге lib, он содержит файл libcmt.lib. Не знаю, чувствителен ли он к регистру, но я знаю, что ничего не изменил в файлах или каталогах визуальной студии.

Кто-нибудь, пожалуйста, скажите мне, как я могу сделать эту работу?

Ответ 1

Я подозреваю, что приглашение командной строки, которое вы используете для запуска компилятора, не содержит всех необходимых переменных среды.

Чтобы убедиться, что среда командной строки настроена правильно, убедитесь, что вы запускаете пакетный файл vsvars32.bat.

Ответ 2

Воскрешение этой темы в конце 2018 года, так как ни одно из других решений не помогло моему делу :)

Для меня эта ошибка начала появляться из ниоткуда после того, как я установил Windows Driver Kit для совершенно не связанного проекта.

Если вам не нужна "Снижение Призрака" (скорее всего, нет) и вы видите эту ошибку, очень вероятно, что вам просто нужно установить Свойства проекта (страницы свойств) → Свойства конфигурации → C/C++ → Код Поколение → Призрачное смягчение, чтобы отключить.

Волшебным образом было установлено значение " Включено " установщиком инструментов Visual Studio для WDK во всех проектах, даже если они не имеют никакого отношения к WDK, а набор инструментов платформы не был выбран для каких-либо связанных с драйверами вещей. Microsoft во всей красе.

Ответ 3

Просто чтобы добавить мой опыт здесь, так как это может кому-то помочь, и это относится к более новым версиям VS (2017 в моем случае).

Я получил похожую ошибку во время компиляции, когда я переместил свой проект на новую машину. В конце концов я понял, что в одном из проектов в моих зависимостях включено смягчение спектра, и библиотеки с такой поддержкой не включены по умолчанию:

enter image description here

Ответ 4

Это сработало для меня, когда я получил...

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

Название вашего проекта == "Имя проекта" для этого примера.

Перейдите в окно Solution Explorer "для вашего проекта.

ПРАВИЛЬНО Щелкните по проекту "Название проекта", а не "Имя проекта".

Это откроет длинное меню.

Внизу " Свойства" Нажмите на него.

Это откроет окно свойств Имя проекта.

ЕСЛИ имя окна (в верхнем левом углу) говорит...

"Название проекта" Название проекта "Страницы свойств

Закройте это окно, щелкнув правой кнопкой мыши по Решение, а не проекту, вам нужно щелкнуть правой кнопкой мыши по имени проекта.

На странице свойств Название проекта

Левая панель раскрывается Свойства конфигурации

Затем нажмите Общие

Теперь правая панель должна показать " Общие" Свойства конфигурации "для вашего текущего проекта.

Посмотрите список на " Набор инструментов для платформы"

Если версия VS, которую вы используете, не указана в списке, которую вам нужно изменить.

Чтобы изменить версию VS, просто поместите указатель мыши в конец текущего имени версии VS и нажмите.

В правой части этой строки появится поле со стрелкой вниз. Нажмите.

Это откроет окно со списком версий VS.

Выберите версию VS, которую вы используете сейчас.

Это окно должно закрыться, и ваш выбор должен был заменить старую версию VS проекта, которая была использована для создания вашего проекта при первом создании.

Затем в нижней части страницы свойств Название проекта нажмите Применить, затем ОК.

Теперь попробуйте создать проект.

Я надеюсь, что это поможет, он работает для меня при работе над проектами, которые были построены с более ранними версиями VS.

Удачи Майку.

Ответ 5

Я получил ту же ошибку при запуске cl.exe из командной строки Командная строка разработчика для VS2012. Оказалось, что мне нужно было перезапустить командную строку, щелкнув правой кнопкой мыши по ней и выбрав "Запуск от имени администратора".

Ответ 6

Щелкните правой кнопкой мыши ProjectNameSolution Explorer) → PropertiesLinkerGeneralAdditional Library Directory и установите его так:

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