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

Сведения о предварительно скомпилированных типах не найдены; Имя файла не связано или перезаписывается

Файл объекта filename, скомпилированный с помощью /Yc, не указан в команде LINK или перезаписан.

Если вы создаете библиотеку отладки, использующую предварительно скомпилированные заголовки, и если указать /Yc и /Z7, Visual C++ создает предварительно скомпилированный файл объекта, содержащий сведения об отладке. Ошибка возникает только при хранении предварительно скомпилированного файла объекта в библиотеке, используйте библиотеку для создания исполняемого образа, а файлы объектов, на которые ссылается ссылка, не имеют транзитивных ссылок на какие-либо функции, определяемые предварительно скомпилированным файлом объектов.

Существует два способа обойти эту ситуацию:

  • Укажите параметр компилятора /Yd, чтобы добавить сведения отладки из предварительно скомпилированного заголовка в каждый модуль объекта. Этот метод менее желателен, так как обычно он создает большие модули объектов, которые могут увеличить время, необходимое для связывания приложения.

  • Укажите /Yl и передайте имя любой произвольной строки при создании предварительно скомпилированного файла заголовка, который не содержит определений функций. Это направляет компилятору создать символ в предварительно скомпилированном файле объекта и отправить ссылку на этот символ в каждом файле объекта, который использовал предварительно скомпилированный файл заголовка, связанный с предварительно скомпилированным файлом объекта.

При компиляции модуля с помощью /Yc и /Yl компилятор создает символ, аналогичный __@@_PchSym_@00@...@symbol_nameтому, где многоточие (...) представляет созданную компилятором строку символов и сохраняет ее в модуле объекта. Любой исходный файл, скомпилированные с этим предварительно скомпилированным заголовком, ссылается на указанный символ, что приводит к включению компоновщика модуля объекта и его сведений об отладке из библиотеки.