Не удается открыть файл msvcrtd lib

Обновлено: 01.07.2024

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

Мой проект содержит один исходный файл: Foo.cpp. Вот его код:

как вы можете видеть, я пытался использовать JNI, но я не думаю, что это имеет какое-либо отношение к проблеме. Вот что я пробовал в командной строке:

В моей среде я установил:

ВКЛЮЧЕНО: 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. Не знаю, чувствителен ли он к регистру, но я знаю, что ничего не изменил в файлах или каталогах визуальной студии.

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

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

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

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

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

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

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

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

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

enter image description here

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Решение

Если я правильно понимаю, вы смешиваете выпускную версию OpenSSL с отладочной версией вашей программы, которая вызывает использование разных версий CRT, так как вы не опубликовали фактические настройки, может быть даже хуже, что OpenSSL использует DLL CRT, в то время как ваш код статический. Пожалуйста, опубликуйте, какой тип CRT использует ваша программа (можно найти, нажав Properties на проекте, а затем Configuration Properties -> C/C++ -> Code Generation -> Runtime Libarary ). Либо используйте правильную версию OpenSSL (например, создайте ее с отладочной информацией и привязайте к отладочной CRT), либо, поскольку вы заявляете, что не можете перекомпилировать OpenSSL, скомпилируйте свой код с помощью Multi-threaded DLL в выпуске без оптимизации, так что вы получаете программу, которая может быть отлажена и использует тот же CRT, что и OpenSSL. Это должно решить это, я думаю.

Другие решения

Компилятор Visual Studio имеет два режима при сборке: многопоточный и не многопоточный. Вы устанавливаете режим при создании проекта и можете изменить его позже в настройках проекта.

Проблема в том, что эти два режима несовместимы. Если вы смешиваете многопоточные и не многопоточные библиотеки, вы получите ошибки, подобные тем, которые есть у вас. Либо перекомпилируйте другую библиотеку с другим режимом, либо измените режим вашего проекта в соответствии с режимом библиотеки.

Дело в том, что вы динамически связываете свое приложение с MD / MD в VS (по умолчанию это означает, что вы должны предоставить распространяемый пакет Visual Studio вместе с приложением).

Свойства -> Свойства конфигурации -> C / C ++ -> Генерация кода -> Библиотека времени выполнения

Принимая во внимание, что библиотека opensll по умолчанию ссылается на среду выполнения статически (среда выполнения содержит, например, реализацию STL). Не следует смешивать связывание во время выполнения с предупреждением.
Вы можете решить эту проблему, перекомпилировав библиотеку opensll, используя динамические ссылки на среду выполнения.

Перейдите к свойствам вашего проекта, выберите Linker слева. Добавьте это в " Дополнительные каталоги библиотек":

Для бедных людей, которые борются с этим, после часа исследований я нашел решение для моей Visual Studio Enterprise 2017:

Сначала давайте найдем, где находится файл вашей библиотеки:

С помощью проводника Windows перейдите в каталог, в котором установлена Visual Studio (по умолчанию: C:\Program Files (x86)\Microsoft Visual Studio), и выполните поиск по msvcrtd.lib.

Я нашел мой, чтобы быть здесь:

Быстрое исправление (только для одного проекта):

Постоянное исправление (для всех проектов)

  1. Открыть проект
  2. перейдите к View> Property Manager (это может быть в других окнах)
  3. Разверните все папки и выберите несколько " Microsoft.cpp.Win32.user " и " Microsoft.cpp.64.user "

enter image description here

    Щелкните правой кнопкой мыши и перейдите к свойствам

enter image description here

Перейдите в каталог VC++ .

Добавьте путь к каталогам библиотеки по умолчанию

В некоторых диалоговых окнах свойств в свойствах проекта есть флажок, указывающий "Наследовать от родительских или проектов по умолчанию" . Убедитесь, что флажок флажка Включить и Библиотека отмечен флажком и, конечно, для окна Дополнительные зависимости.

Я столкнулся с этим вопросом. Файл существовал на моей машине, он был в пути поиска. Я был озадачен, так как результат ошибки действительно бесполезен. В моем случае я включил смягчение Spectre, но не загрузил библиотеки времени выполнения для Spectre. Как только я сделал загрузку, все было в порядке с миром. Я должен был установить это на своих серверах сборки CI, так как эти библиотеки не установлены с VS по умолчанию.

также стоит проверить, что файл MSVCRTD.lib присутствует в "C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" для x64 и в C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib для 32 бит. Иногда VS может быть неправильно установлен или эти файлы могут быть удалены случайно.

Сценарий:

Windows 10 с Visual Studio 2017 (установка FRESH).

Проект 'C' (ССЫЛКА: фатальная ошибка LNK1104: не удается открыть файл ' MSVCRTD.lib ').

Разрешить:

Запустите " Установщик Visual Studio ".

Выберите " Разработка рабочего стола с помощью C++ ".

В разделе "Сведения об установке" (обычно на правой боковой панели) выберите:

4.1. V C++ 2015.3 v14.00 (v140) набор инструментов для рабочего стола.

  • Версия набора инструментов в 4.1. это только для примера.

Щелкните правой кнопкой мыши "SomeProject" → "Свойства" → " Линкер " → " Общие " → " Дополнительные каталоги библиотек ": $ (VCToolsInstallDir)\lib\x86

(. для проекта x64: "Дополнительные каталоги библиотек": $ (VCToolsInstallDir)\lib\x64 . )

Я решил эту проблему, вам нужно установить все спектры lib. Vistual Studio Installer-> Изменить → Component-> Любой призрак lib. Это решение может быть адаптировано к любому проекту.

Удаление это решает проблему. Просто публикация здесь как связанная проблема для людей, ищущих решения: После установки WDK VC++ не работает

Если вы используете VS2017, пожалуйста, прочитайте его. Или просто проигнорируйте этот ответ. Он может быть недействительным для другой версии VS.

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

  • [ЛУЧШИЙ] Вам просто нужно установить их через VS_installer (большинству из нас просто нужна версия для x86/x64 ниже)
    • VC++ версия 2017 года version_numbers Libs для Spectre [(x86 и x64) | (ARM) | (ARM64)]
    • Визуальный C++ ATL для [(x86/x64) | ARM | ARM64] с призраками
    • Визуальный C++ MFC для [x86/x64 | ARM | ARM64] с призраками

    Это ошибка VisualStudioTeam, и Microsoft виновата.

    Вы не можете создать глобальную конфигурацию для отключения /QSpectre и IDK, когда и почему VS2017 включит его за один день. Так что лучше всего установить Spectre ? ahhha?

    Я столкнулся с этой проблемой при компиляции примера приложения с использованием VS2017 Надеюсь, это поможет

    enter image description here

    Этот ответ был не совсем точным для меня. У меня установлен VS2010 Ultimate, и этот файл не находится в моей папке Visual Studio 10.0\VC. Скорее я нашел его в папке Visual Studio 9.0\VC. Поэтому, если это относится к кому-либо, следуйте указаниям, чтобы изменить Linker, но вместо этого используйте папку Visual Studio 9.0\VC. Это сработало для меня.

    Для Visual Studio 2017 Перейдите к свойствам вашего проекта, выберите Linker слева. Добавьте это в "Дополнительные библиотечные каталоги":

    C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\lib

    Я получил немного другую ошибку

    LNK1104 не может открыть файл 'MSVCURTD.lib'

    Обратите внимание, что это msvcUrtd (не msvcrtd), но файл не найден в моей системе.

    Решил это, установив следующие параметры:

    Надеюсь, это поможет.

    В VS2017 (Сообщество/Предприятие /Ultimate/Professional):

    Добавьте путь (и) к папке (папкам), которые включают в себя желаемый файл (ы).lib, по следующему пути в VS:

    Проект (щелкните правой кнопкой мыши) (в обозревателе решений) → Properties-> Конфигурация Properties-> Linker → General-> Дополнительные каталоги библиотек

    Если существует более одного файла ".lib", используйте ';' чтобы разделить их, в противном случае нажмите на поле редактирования, соответствующее "Дополнительные каталоги библиотек", затем нажмите "" в выпадающем меню и добавьте все нужные файлы ".lib" в открывшемся окне один за другим и в удобной для пользователя форме.

    Я столкнулся с этим с помощью Visual Studio 2017. Я попробовал решения, предложенные здесь, с явным добавлением путей к месту расположения файла "MSVCRT.lib". Но я чувствовал, что это, вероятно, не правильный подход, потому что ранее в течение последних нескольких недель это не было проблемой с моим проектом.

    После проб и ошибок я обнаружил, что если я оставлю пустое или пустое значение в разделе Linker → Input, это выдаст мне ошибку о LNK1104: невозможно открыть файл 'MSVCRT.lib'. В конце концов я понял, что вместо этого я должен оставить это значение.

    В проекте Visual Studio щелкните правой кнопкой мыши элемент проекта на панели обозревателя решений (а не само решение, которое является самым верхним элементом), затем выберите "Свойства". Оттуда сделайте следующее:

    Linker → Input: % (AdditionalDependencies)

    Эта дополнительная информация может быть полезна, если вы попали в ситуацию так же, как я. Я обнаружил, что я не должен помещать какие-либо несистемные пути к библиотекам в раздел Linker → Input. С моим проектом я пытался скомпилировать с внешними .lib файлами. Ранее у меня было значение в этом разделе ввода, например: $ (ProjectDir) lib; % (AdditionalDependencies), но это приводит к другим проблемам. Я обнаружил, что правильное место (кажется, пока) для размещения путей для ссылки на внешние файлы .lib в проекте C/C++ в Visual Studio 2017 находится здесь:

    V C++ Каталоги → Библиотечные каталоги: $ (ProjectDir) lib; $ (LibraryPath)

    Обратите внимание, что значение $ (LibraryPath) будет включать дополнительные значения, такие как унаследованные от родителей. Мой проект папок содержал папку с именем "lib", поэтому у меня было первое значение перед точкой с запятой.

    I'm a novice C++ developer. I encontered the error message indicates "LINK :fatal error LNK1104: cannot open file 'MSVCRTD.lib'" while I'm trying to debug every single project in Microsoft Visual C++ 2010 Express. I searched on Stack overflow and Google for any possible resolution, but I couldn't find exact and precise answer. What I have understood is that the "msvcrtd.lib" file should be in "\Microsoft Visual Studio 10.0\VC\lib", but that file is not there in my case. What should I do?


    206 1 1 gold badge 5 5 silver badges 20 20 bronze badges 381 2 2 gold badges 5 5 silver badges 11 11 bronze badges holtavolt, I uninstalled visual c++ and then installed it and it works now, thanks!

    20 Answers 20

    For the poor souls out there who are struggling with this, after an hour of research I found a solution for my Visual Studio Enterprise 2017:

    First, lets find where is your library file located:

    With windows explorer, go to your directory where Visual Studio is installed, (default: C:\Program Files (x86)\Microsoft Visual Studio) and do a search for msvcrtd.lib

    Quick Fix (for one project only):

    Permanent Fix (for all projects)

    1. Open a project
    2. navigate to View > Property Manager (it could be under Other Windows)
    3. Expand all folders and multi select all "Microsoft.cpp.Win32.user" & "Microsoft.cpp.64.user"

    enter image description here

    enter image description here

    Navigate to VC++ Directories

    Add the path to default Library Directories


    +1, it works. But beware that the path that needs to be added differs for x86/x64 and for debug/release builds.

    Go to your project properties, select Linker from left. Add this to "Additional Library Directories":


    21.1k 14 14 gold badges 98 98 silver badges 136 136 bronze badges 415 1 1 gold badge 8 8 silver badges 20 20 bronze badges

    There is a check box that says "Inherit from parent or project defaults" in some of the property dialogs in Project Properties. Make sure that check box is checked for your Include and Library directories property windows and of course for your Additional Dependencies window.


    2,254 4 4 gold badges 30 30 silver badges 45 45 bronze badges

    I came across this problem when compiling a sample app using VS2017 Hope this will help

    enter image description here

    If you use VS2017, please read it. Or just ignore this answer. It may be invalid for other VS version.

    Do not trust anyone who told you to add lib path.

    • [BEST] You just need to install these via VS_installer (most of us just need x86/x64 version below)
      • VC++ 2017 version version_numbers Libs for Spectre [(x86 and x64) | (ARM) | (ARM64)]
      • Visual C++ ATL for [(x86/x64) | ARM | ARM64] with Spectre Mitigations
      • Visual C++ MFC for [x86/x64 | ARM | ARM64] with Spectre Mitigations

      This is VisualStudioTeam's fault and Microsoft is guilty.

      You can't make a global configuration to disable /QSpectre , and IDK when and why VS2017 enable it in one day. So the best way is install Spectre ? ahhha?


      For VS 2019, Spectre Mitigation is enabled by default. So the right way to fix the issue would be to install VC++ Libs for Spectre.

      But, to quickly resolve the issue, you may disable Spectre Mitigation

      Project Properties -> C/C++ -> Code Generation -> Spectre Mitigation -> Disabled

      enter image description here

      1,981 1 1 gold badge 21 21 silver badges 30 30 bronze badges

      I ran into this issue. The file existed on my machine, it was in the search path. I was stumped as the error result is really unhelpful. In my case I had turned on Spectre mitigation, but had not downloaded the runtime libs for Spectre. Once I did the download all was right with the world. I had to get this installed on my CI build servers also, as these libs are not installed with VS by default.

      I have solved this problem, you need install all spectre lib. Vistual Studio Installer->Modify->Component->Any spectre lib. This solution can be adapted to any project.


      This worked for me, although I never configured it to use any spectre mitigation.

      Uninstalling it fixes the problem. Just posting here as a related issue for people looking for solutions: After installing WDK VC++ is broken

      3,111 1 1 gold badge 25 25 silver badges 46 46 bronze badges

      Scenario:

      Windows 10 with Visual Studio 2017 (FRESH installation).

      'C' project (LINK : fatal error LNK1104: cannot open file 'MSVCRTD.lib').

      Resolve:

      Run 'Visual Studio Installer'.

      Click button 'Modify'.

      Select 'Desktop development with C++'.

      From "Installation details"(usually on the right-sidebar) select:

      4.1. VC++ 2015.3 v14.00(v140) toolset for desktop.

      • Version of 'toolset' in 4.1. is just for example.

      Right-click 'SomeProject' -> 'Properties' -> 'Linker' -> 'General' -> 'Additional Library Directories': $(VCToolsInstallDir)\lib\x86

      (. for x64 project: 'Additional Library Directories': $(VCToolsInstallDir)\lib\x64 . )


      it is also worth checking that MSVCRTD.lib file is present in "C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" for x64 and in C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\lib for 32 bit. Sometimes VS might not be installed properly OR these files might get deleted accidentally.

      802 1 1 gold badge 11 11 silver badges 32 32 bronze badges

      This indicates that Visual Studio wasn't able to find the lib (Library) directory which contains msvcrtd.lib .

      IMPORTANT: This lib directory also contains linkers required during the compilation process.

      So, all you need to do is override the Library Directory location. You can do so with the help of Environment Variables.

      I referred to this StackOverflow Post for help. As per the answer posted, the Environment Variable LIB refers to the path where the Linker Libraries are located. Why is this method better? Because this will apply to all the projects instead of just a particular project. Also, you don't need to download anything extra. It just works.

      Follow the steps below to achieve this:

      STEP-1: Search for "msvcrtd.lib" in the search bar.

      STEP-2: Click "Open File Location" (available in context menu)

      enter image description here

      STEP-3: Copy the address of the directory from the address bar.

      enter image description here

      STEP-4: Search "Environment" in the taskbar and click on "Edit the system environment variables".

      enter image description here

      STEP-5: Click on "Environment Variables. " button.

      enter image description here

      STEP-6: Under "System variables" section, click on "New. " button. A dialog would pop up.

      enter image description here

      STEP-7: In the dialog box, enter the following:

      • Variable name: LIB
      • Variable value: [The directory you copied in "STEP-3"]

      enter image description here

      Now, you are all done!


      2,321 3 3 gold badges 15 15 silver badges 32 32 bronze badges

      The above answer was not quite accurate for me. I have VS2010 Ultimate installed and the file in question is not in my Visual Studio 10.0\VC folder. Rather I found it in the Visual Studio 9.0\VC folder. So if that's the case for anyone, follow the lead to change the Linker but use the Visual Studio 9.0\VC folder instead. It worked for me.

      For Visual Studio 2017 Go to your project properties, select Linker from left. Add this to "Additional Library Directories":

      C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\lib

      I got a slightly different error

      LNK1104 cannot open file 'MSVCURTD.lib'

      Note it is msvcUrtd (not msvcrtd), but the file is not found on my system.

      Solved it by setting the following options:

      Hope that helps.


      18.7k 8 8 gold badges 123 123 silver badges 108 108 bronze badges

      In VS2017 (Community/Enterprise/Ultimate/Professional):

      Add the path(s) of the folder(s) which include your desired ".lib" file(s) in the following path in VS:

      (Right Click)Project(in Solution Explorer)->Properties->Configuration Properties->Linker->General->Additional Library Directories

      If there are more than one ".lib" file use ';' to separate them otherwise click on the edit box corresponds to "Additional Library Directories" then click on "" in drop down menu and add all desired ".lib" files in newly opened window one by one and in a easy to handle manner.


      206 1 1 gold badge 5 5 silver badges 20 20 bronze badges

      I ran into this using Visual Studio 2017. I tried the solutions suggested here with explicitly adding paths to where the 'MSVCRT.lib' file was located. But I felt this probably wasn't the correct approach because previously for the past several weeks this had not been a problem with my project.

      After trial and error, I discovered that if I left an empty or blank value in the Linker --> Input section, it would give me the error about LNK1104: cannot open file 'MSVCRT.lib'. Eventually I figured out that I should leave this value there instead.

      On the Visual Studio project, right-Clicking on the project item in the Solution explorer panel (not the Solution itself, which is the topmost item), then select Properties. From there do the following:

      Linker --> Input : %(AdditionalDependencies)

      VC++ Directories --> Library Directories : $(ProjectDir)lib; $(LibraryPath)

      Note the $(LibraryPath) value will include extra values such as inherited from parents. My folder project contained a folder called 'lib' which is why I had the first value there before the semicolon.

      Читайте также: