VS2017编译自定义静态库失败,提示YJMagic未识别求助
解决VS2017静态库编译时‘YJMagic不是类或命名空间名称’的问题
我之前在VS2017里做静态库的时候也踩过类似的预编译头坑,给你几个实用的排查和解决方向:
严格把控预编译头的包含顺序
预编译头stdafx.h必须是每个源文件的第一个包含语句!要是你把#include "YJMagic.h"或者其他定义类/命名空间的头文件写在它前面,编译器会直接跳过预编译头之前的所有代码,自然就识别不到YJMagic的定义了。一定要确保每个cpp的第一行都是#include "stdafx.h"。检查单个文件的预编译头配置
有时候默认生成的静态库项目,个别源文件的预编译头配置会“掉队”:- 右键项目里的每个
.cpp文件 → 属性 → C/C++ → 预编译头 - 确保除了
stdafx.cpp的选项是创建(/Yc),其他所有cpp文件的选项都是使用(/Yu) - 确认“预编译头文件”字段填的是
stdafx.h
- 右键项目里的每个
清理预编译头缓存文件
VS生成的.pch预编译头缓存偶尔会损坏,导致新的定义没被更新进去。可以这么操作:- 点击菜单栏的
生成→清理解决方案 - 手动删掉项目目录下
Debug/Release文件夹里的.pch、.obj和.pdb文件 - 重新生成整个项目
- 点击菜单栏的
关于空项目替代方案的小提醒
你改用空项目手动配置成静态库的思路是完全没问题的。如果之后想再用带预编译头的项目,记得在空项目里添加stdafx.h和stdafx.cpp后,要手动给stdafx.cpp设置创建(/Yc)预编译头,其他cpp设置使用(/Yu),同样要遵守“预编译头第一个包含”的规则。
另外还要确认:定义YJMagic的头文件,要么被包含进stdafx.h里,要么在每个用到它的cpp文件的stdafx.h之后被包含,不然跨文件调用时也会出现识别问题。
内容的提问来源于stack exchange,提问作者Elsa
相关产品推荐
相关产品推荐

