С++: LINK: debug\XXXXX.exe не найден или не создан последней инкрементной ссылкой; полная ссылка

Использование Visual Studio 2008 SP1,
Эта строка:

LINK : debug\XXXXX.exe not found or not built by the last incremental link; performing full link

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

Ответы

Ответ 1

Итак, оказывается, что проблема исправляет его, если я добавлю /INCREMENTAL в командную строку компоновщика. Это несмотря на то, что поведение по умолчанию в соответствии с документами заключается в том, чтобы включить инкрементную привязку.

Странно.

Ответ 2

Старый вопрос, но на всякий случай для кого-то это проблема (и это..).

Инкрементная ссылка несовместима с созданием файла манифеста (Proj opts > Linker > Manifest File > Generate Manifest: Yes). Действительно, создание манифеста модифицирует exe/dll, поэтому линкер должен выполнять полную привязку.

Есть несколько способов обхода: http://chadaustin.me/2009/05/incremental-linking-and-embedded-manifests/

Временное (и самое простое/быстрое) решение состоит в том, чтобы отключить создание манифеста во время разработки и снова включить его на этапе выпуска. Хотя это отключает GUI в стиле XP/Vista для приложения (элементы управления выглядят как "классический режим" ).

Ответ 3

Действительно снимать в темноте, но...

Вы перемещаете файл XXXXX.exe из того места, где он построен в другом месте? Весь смысл инкрементной ссылки заключается в изменении существующего exe. Если их нет, это будет сложно...

Другая возможная причина в том, что файл был изменен после сборки (возможно, другим инструментом)...

Все причины перечислены в элемент справки для /INCREMENTAL:

Кроме того, LINK выполняет полный ссылку, если какая-либо из следующих возникают ситуации:

Файл с инкрементным статусом (.ilk) отсутствует. (LINK создает новый .ilk файл в процессе подготовки к последующим инкрементная привязка.)

Нет разрешения на запись для .ilk. (LINK игнорирует файл .ilk и ссылки неинкрементально.)

Выходной файл .exe или .dll отсутствует.

Временная метка файла .ilk,.exe или .dll изменяется.

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

Добавляется файл (.obj) или опущен.

Объект, который был скомпилирован с помощью /Yu/Z 7 изменен.

Ответ 4

  • Загрузите procmon из Microsoft.
  • Запустите его, настройте фильтр, чтобы вы искали доступ к пути, содержащему ваше .exe-имя.
  • Сделайте ссылку.
  • Посмотрите, какие проблемы у него есть - найдет ли он, он регистрирует ошибку при ее открытии. Procmon будет регистрировать каждый файл, открывать, читать, закрывать и т.д. Если он получает ошибку, он будет регистрировать его.
  • Также убедитесь, что он может найти файл .ilk - я думаю, он тоже нуждается в этом.

Ответ 5

(Также в темноте) Одна из возможных причин заключается в том, что вы используете заголовок проекта, ссылающийся на макрос __DATE__. Но в этом случае вы также увидите полную перекомпиляцию (не так ли?)

Ответ 6

В моем случае у меня есть эта ошибка вчера.

VS установите code generation > runtime Library в Multi-threaded Debug DLL (/MDd) вместо Multi-threaded Debug (/MTd).

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