C++: ССЫЛКА: debug\XXXXX.exe, не найденный или не созданный последней возрастающей ссылкой; выполнение полной ссылки

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

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

15
задан shoosh 12 October 2009 в 14:44
поделиться

5 ответов

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

Странно.

5
ответ дан 1 December 2019 в 02:46
поделиться

На самом деле съемка в темноте, но ...

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

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

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

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

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

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

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

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

Параметр LINK изменен. Большинство ССЫЛКИ параметры при изменении между сборками, вызывает полную ссылку.

Добавлен объектный файл (.obj) или опущено.

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

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

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

1
ответ дан 1 December 2019 в 02:46
поделиться

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

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

Для получения дополнительных сведений существует несколько обходных путей: http://chadaustin.me/2009/05/incremental-linking-and-embedded-manifests/

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

13
ответ дан 1 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: