今天在把旧的 Max 插件和新引擎整合时,MAXSDK 又给我添了个麻烦。它自带的 core.lib 和我自己的 core.lib 发生了链接冲突,名字上硬碰硬,最后只能我这边让一步,把库名改掉。
问题解决到一半,新的麻烦又冒出来了:即使一次完整编译已经成功,进入调试时所有工程还是会再编译一遍。清理后重新编译,又报了一个和 vc90.pdb 相关的 C2859 错误。
error C2859: x:\XXX\vc60.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header.
mschart.cpp
这类报错通常都绕不开预编译头和 PDB 文件。最初我也试过改名之类的办法,但都不彻底。最后是在项目属性里把 Configuration Properties | C/C++ | Output Files 下面的 Program Database File Name 改成了 $(IntDir)\$(ProjectName).pdb,也就是让静态库的 PDB 不再默认叫 vc90.pdb,而是跟着项目名走。
这样一改,重复编译的问题就消失了,C2859 也不再出现。
这类问题看起来像是'预编译头坏了',网上不少人的建议是直接去掉预编译头。但如果项目本来就依赖它,硬删往往不是最稳妥的做法。很多时候,真正该检查的反而是 PDB 的命名和生成路径是否和工程配置冲突。

