C ++: LINK: debug \ XXXXX.exe не найден или не создан по последней добавочной ссылке; выполнение полной ссылки - PullRequest
14 голосов
/ 12 октября 2009

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

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

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

Ответы [ 6 ]

13 голосов
/ 17 апреля 2010

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

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

Есть несколько обходных путей, для более подробной информации: http://chadaustin.me/2009/05/incremental-linking-and-embedded-manifests/

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

5 голосов
/ 13 октября 2009

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

Странно.

4 голосов
/ 13 октября 2009

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

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

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

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

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

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

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

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

Метка времени .ilk, .exe или .dll изменено.

Опция LINK изменена. Мост ССЫЛКА варианты, когда меняются между сборками, вызвать полную ссылку.

Файл объекта (.obj) добавлен или опущено.

Объект, который был скомпилирован с / Yu / Z7 опция изменена.

3 голосов
/ 13 октября 2009
  1. Скачать procmon от Microsoft.
  2. Запустите его, настройте фильтр так, чтобы вы искали доступ к пути, содержащему ваше имя .exe.
  3. Сделайте ссылку.
  4. Посмотрите, в чем проблема - находит ли он, регистрирует ли он ошибку при открытии. Procmon будет регистрировать каждый файл, открытый, прочитанный, закрытый и т. Д. Если получит ошибку, он зарегистрирует ее.
  5. Также убедитесь, что он может найти файл .ilk - я думаю, что это тоже нужно.
1 голос
/ 13 октября 2009

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

0 голосов
/ 04 октября 2013

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

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

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

...