Ошибка средств компоновщика LNK1104

не удается открыть файл "filename"

Эта ошибка сообщается, когда компоновщик не может открыть файл либо для чтения, либо для записи. Ниже приведены две наиболее распространенные причины проблемы:

  • программа уже запущена или загружена в отладчик и

  • Пути к библиотеке неверны или не упакованы в двойные кавычки.

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

Не удается открыть приложение или PDB-файл

Приложение запущено или загружается в отладчик

Если имя файла — это имя исполняемого файла или связанный PDB-файл, проверьте, уже ли запущено ваше приложение. Затем проверка, загружается ли он в отладчик. Чтобы устранить эту проблему, остановите программу и выгрузите ее из отладчика, прежде чем снова создать ее. Если приложение открыто в другой программе, например редактор ресурсов, закройте его. Если программа не отвечает, может потребоваться использовать диспетчер задач для завершения процесса. Кроме того, может потребоваться закрыть и перезапустить Visual Studio.

Приложение заблокировано антивирусной программой

Антивирусная программа часто временно блокирует доступ к вновь созданным файлам, особенно исполняемым файлам .exe и DLL. Чтобы устранить эту проблему, попробуйте исключить каталоги сборки проекта из антивирусного сканера.

Не удается открыть файл библиотеки Майкрософт

Библиотеки Windows, такие как kernel32.lib

Если файл, который не удается открыть, является одним из стандартных файлов библиотек, предоставляемых корпорацией Майкрософт, например kernel32.lib, может возникнуть ошибка конфигурации проекта или ошибка установки. Убедитесь, что установлен пакет SDK для Windows. Если для проекта требуются другие библиотеки Майкрософт, например MFC, убедитесь, что компоненты MFC также установлены установщиком Visual Studio. Вы можете снова запустить установщик, чтобы добавить необязательные компоненты в любое время. Дополнительные сведения см. в Изменение Visual Studio. Используйте вкладку "Отдельные компоненты" в установщике, чтобы выбрать определенные библиотеки и пакеты SDK.

Библиотеки vcruntime версии

Если сообщение об ошибке содержит версию библиотеки Майкрософт, например msvcr120.lib, набор инструментов платформы для этой версии компилятора может не быть установлен. Чтобы устранить эту проблему, у вас есть два варианта: обновите проект, чтобы использовать текущий набор инструментов платформы, или установите старый набор инструментов и создайте проект без изменений. Дополнительные сведения см. в статье Об обновлении проектов из более ранних версий Visual C++ и использовании собственных многонацелений в Visual Studio для создания старых проектов.

Библиотеки для розничной торговли, отладки или платформы

Ошибка может возникать при первой сборке для новой целевой платформы или конфигурации, например розничной торговли или ARM64. В интегрированной среде разработки убедитесь , что набор инструментов платформы и версия Windows SDK, указанные на странице общего свойства, устанавливаются. Также убедитесь, что необходимые библиотеки доступны в каталогах библиотек, указанных на странице свойств каталогов VC++. Проверьте свойства для каждой конфигурации, например Отладка, Розничная торговля, x86 или ARM64. Если одна сборка работает, но другая не работает, сравните параметры для обоих. Установите все отсутствующие необходимые средства и библиотеки.

Библиотека vccorlib.lib

Для приложений или компонентов универсальной платформы Windows (UWP) нет библиотек с устранением рисков Spectre. Если сообщение об ошибке содержит vccorlib.lib, возможно, вы включили /Qspectre в проекте UWP. Отключите параметр компилятора /Qspectre , чтобы устранить эту проблему. В Visual Studio измените свойство "Устранение рисков Spectre". Он находится на странице создания кода C/C++>в диалоговом окне "Страницы свойств проекта".

Библиотеки в проектах из интернета или других источников

Если вы создаете проект, скопированный с другого компьютера, расположение установки библиотеки может отличаться. Для сборок командной строки убедитесь, что переменная среды LIB и пути библиотеки задаются правильно для сборки. В Visual Studio можно просмотреть и изменить текущие пути библиотеки, заданные на страницах свойств проекта. На странице каталогов VC++ выберите раскрывающийся список для свойства каталогов библиотеки, а затем нажмите кнопку "Изменить". В разделе "Вычисляемое значение " диалогового окна "Каталоги библиотеки " перечислены текущие пути, поиск файлов библиотеки. Обновите эти пути, чтобы указать локальные библиотеки.

Обновленные библиотеки пакета SDK для Windows

Эта ошибка может возникать, когда путь Visual Studio к пакету SDK для Windows устарел. Это может произойти, если установить новый пакет SDK для Windows независимо от установщика Visual Studio. Чтобы исправить его в интегрированной среде разработки, обновите пути, указанные на странице свойств каталогов VC++. Задайте версию в пути, чтобы соответствовать новому пакету SDK. Если вы используете командную строку разработчика, обновите пакетный файл, который инициализирует переменные среды с новыми путями пакета SDK. Эту проблему можно избежать с помощью установщика Visual Studio для установки обновленных пакетов SDK.

Не удается открыть файл сторонней библиотеки

Существует несколько распространенных причин для этой проблемы:

  • Путь к файлу библиотеки может быть неверным или не упакован в двойные кавычки. Или, возможно, вы не указали его компоновщику.

  • Возможно, вы установили 32-разрядную версию библиотеки, но вы создаете для 64-разрядных версий или наоборот.

  • Библиотека может иметь зависимости от других библиотек, которые не установлены.

Чтобы устранить проблему пути для сборок командной строки, убедитесь, что задана переменная среды LIB. Убедитесь, что он содержит пути для всех используемых библиотек и для каждой конфигурации, которая вы создаете. В интегрированной среде разработки пути библиотеки задаются свойством каталогов> библиотек VC++. Убедитесь, что все каталоги, содержащие необходимые библиотеки, перечислены здесь для каждой конфигурации, которую вы создаете.

Возможно, потребуется указать каталог библиотеки, переопределяющий стандартный каталог библиотеки. В командной строке используйте /LIBPATH этот параметр. В интегрированной среде разработки используйте свойство "Дополнительные каталоги библиотек" на странице свойств компоновщика > конфигурации> "Общие свойства" проекта.

Убедитесь, что вы устанавливаете каждую версию библиотеки, необходимую для конфигураций, которые вы создаете. Рекомендуется использовать служебную программу управления пакетами vcpkg , чтобы автоматизировать установку и настройку для многих распространенных библиотек. Когда вы можете, лучше всего создавать собственные копии сторонних библиотек. Затем у вас есть все локальные зависимости библиотек, созданные для тех же конфигураций, что и проект.

Не удается открыть файл, созданный проектом

Эта ошибка может появиться, если имя файла еще не существует, когда компоновщик пытается получить к нему доступ. Это может произойти, если один проект зависит от другого в решении, но проекты создаются в неправильном порядке. Чтобы устранить эту проблему, убедитесь, что ссылки на проекты заданы в проекте, использующего файл. Затем отсутствующий файл создается до его необходимости. Дополнительные сведения см. в статье "Добавление ссылок в проектах Visual Studio C++ и управление ссылками в проекте".

Не удается открыть файл "C:\Program.obj"

Если в сообщении об ошибке отображается имя файла C:\Program.obj , оставьте пути библиотеки в двойные кавычки. Эта ошибка возникает при отмене пути, начинающегося с C:\Program Files , передается компоновщику. Распакованные пути также могут привести к аналогичным ошибкам. Как правило, они отображают непредвиденный OBJ-файл в корне диска.

Чтобы устранить эту проблему для сборок командной строки, проверка параметры параметра /LIBPATH. Кроме того, проверка пути, указанные в переменной среды LIB, и пути, указанные в командной строке. Не забудьте использовать двойные кавычки вокруг любых путей, включающих пробелы.

Чтобы устранить эту проблему в интегрированной среде разработки, добавьте двойные кавычки при необходимости в следующие свойства проекта:

  • Свойство каталогов библиотеки на странице свойств > каталогов конфигурации VC++

  • Свойство "Дополнительные каталоги библиотек" на странице свойств компоновщика > конфигурации> "Общие свойства"

  • Свойство "Дополнительные зависимости" на странице свойств компоновщика > конфигурации> input.

Другие распространенные проблемы.

Проблемы с путьом или именем файла

Эта ошибка может возникать, если имя файла библиотеки или путь, указанный компоновщику, неверны. Или, если путь имеет недопустимую спецификацию диска. Просмотрите командную строку или в любой директиве #pragma комментариев (lib, "library_name" ) для проблем. Проверьте орфографию и расширение файла и убедитесь, что файл существует в указанном расположении.

Параллельная синхронизация сборки

Если вы используете параметр параллельной сборки, Visual Studio, возможно, заблокировали файл в другом потоке. Чтобы устранить эту проблему, убедитесь, что один и тот же объект кода или библиотека не встроены в несколько проектов. Используйте зависимости сборки или ссылки на проекты для получения созданных двоичных файлов в проекте.

Дополнительные зависимости, указанные в интегрированной среде разработки

При указании отдельных библиотек непосредственно в свойстве "Дополнительные зависимости" используйте пробелы для разделения имен библиотек. Не используйте запятые или запятые. Если вы используете пункт меню "Изменить ", чтобы открыть диалоговое окно "Дополнительные зависимости" , используйте новые строки для разделения имен, а не запятых, запятых или пробелов. Также используйте новые линии при указании путей библиотеки в диалоговых окнах каталогов библиотек и дополнительных каталогов библиотек.

Пути, слишком длинные

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

Файлы, слишком большие

Эта ошибка может возникнуть, так как файл слишком велик. Библиотеки или файлы объектов, превышающие размер гигабайта, могут вызвать проблемы с 32-разрядным компоновщиком. Возможное исправление этой проблемы заключается в использовании 64-разрядного набора инструментов. Дополнительные сведения об использовании 64-разрядного набора инструментов в командной строке см. в статье "Включение 64-разрядного набора инструментов Visual C++ в командной строке". Сведения об использовании 64-разрядного набора инструментов в интегрированной среде разработки см. в разделе "Использование MSBuild" с 64-разрядным компилятором и инструментами. См. также эту запись Stack Overflow: как сделать Visual Studio использовать собственную цепочку инструментов amd64.

Неверные разрешения на файл

Эта ошибка может возникнуть, если у вас недостаточно разрешений на доступ к имени файла. Это может произойти, если вы используете обычную учетную запись пользователя для доступа к файлам библиотеки в защищенных системных каталогах. Или, если вы используете файлы, скопированные из других пользователей, которые по-прежнему имеют свои исходные разрешения. Чтобы устранить эту проблему, переместите файл в каталог проектов, доступный для записи. Если перемещаемый файл имеет недоступные разрешения, выполните команду takeown.exe в окне командной строки Администратор istrator, чтобы взять на себя ответственность за файл.

Недостаточно места на диске

Ошибка может возникать, если у вас недостаточно места на диске. Компоновщик использует временные файлы в нескольких ситуациях. Даже если у вас достаточно места на диске, большая ссылка может истощить или фрагментировать доступное место на диске. Рассмотрите возможность использования параметра /OPT (Оптимизация), при выполнении транзитивной ликвидации COMDAT выполняется несколько раз считывания всех файлов объектов.

Проблемы в переменной среды TMP

Если имя файла называется LNKnnn, это имя файла, созданное компоновщиком для временного файла. Каталог, указанный в переменной среды TMP, может не существовать. Кроме того, для переменной среды TMP может быть указано несколько каталогов. Для переменной среды TMP следует указать только один путь к каталогу.

Справка, моя проблема не указана здесь!

Если ни один из перечисленных здесь проблем не применяется, вы можете использовать средства обратной связи в Visual Studio для получения справки. В интегрированной среде разработки перейдите в строку меню и выберите "Справка > по отправке отзывов > " о проблеме. Или отправьте предложение с помощью справки > по отправке отзывов > отправить предложение. Вы также можете использовать сайт Microsoft Learn Q&A для вопросов и веб-сайт Сообщество разработчиков Visual Studio C++. Используйте эти сайты для поиска ответов на вопросы и получения справки. Дополнительные сведения см. в статье "Как сообщить о проблеме с набором инструментов или документацией Visual C++".

Если вы обнаружили новый способ устранения этой проблемы, которую мы должны добавить в эту статью, сообщите нам об этом. Вы можете отправить нам отзыв с помощью кнопки ниже для этой страницы. Используйте его для создания новой проблемы в репозитории GitHub документации по C++ . Спасибо!