链接器工具错误 LNK1211
未找到预编译类型信息;未链接或覆盖“filename”
使用 /Yc 编译的 filename 目标文件未在 LINK 命令中指定或已被覆盖。
如果要创建使用预编译标头的调试库,并且指定了 /Yc 和 /Z7,Visual C++ 将生成包含调试信息的预编译目标文件。 仅当将预编译的目标文件存储在库中,使用该库生成可执行映像,并且引用的目标文件对预编译的目标文件定义的任何函数没有传递引用时,才会发生此错误。
解决此问题有两种方法:
指定 /Yd 编译器选项以将调试信息从预编译标头添加到每个目标模块。 此方法不太合乎要求,因为通常会生成大型对象模块,这会增加链接应用程序所需的时间。
在创建不包含任何函数定义的预编译头文件时,指定 /Yl 并传递任意字符串的名称。 这指示编译器在预编译的目标文件中创建一个符号,并在每个使用与预编译的目标文件关联的预编译头文件的目标文件中发出对该符号的引用。
使用 /Yc 和 /Yl 编译模块时,编译器会创建一个类似于 __@@_PchSym_@00@...@symbol_name
的符号,其中省略号 (…) 表示编译器生成的字符串,并将其存储在目标模块中。 使用此预编译标头编译的任何源文件都引用指定的符号,这会导致链接器从库中包含目标模块及其调试信息。