在用vs2019编译一个游戏exe,遇到过一个非常麻烦的问题:报***.obj LNK2001 无法解析的外部符号。
它的工作过程是:
1、一个3D的游戏引擎,先编译成lib和dll,里面有在头文件导出extern的变量供游戏使用;
2、游戏exe引用了引擎的lib和头文件,还有里面的变量。
编译游戏exe时,结果报错,问题如下:

报错,游戏exe无法连接到导出的extern变量。
百思不得其解。
比对了另外一个差不多同样代码的别人的项目,它是可以编译成功的。
于是,把项目属性一个对一个都比对改一样的,结果还是不行。这到底差别在哪里呢?
在网上找遍了所有的link 2001报错处理方法,都无用。准备放弃了。
后来,无意中看到引擎定义的导出extern变量是有#define #### 的,这个是在预编译定义里设定的。
在游戏exe这边,却在预编译里定义了另外一个不同的名称,试着改成相同的,竟然顺利通过编译了。
这里发出来,希望对遇到类似问题的可以参考下。