我们遇到的大多数问题都很常见,按步骤检查就可以解决。遇到一些奇怪的BUG,保持良好的心态尤为重要。
介绍一下解决方案:TestWindowDlg(为启动项exe)、BaseDLL(类库),BaseDLL有函数MyFunction()。生成程序遇到报错提示"无法解析的外部符号MyFunction..."。
一、解决步骤:
1、检查MyFunction,是否仅声明未实现——着重检查参数和返回值是否与声明一致。
检查静态链接库/动态链接库附加依赖,3、4、5步有一种设置正确即可。
2、检查库目录(两处有一个配置就可以)
2.1 项目右键属性->配置属性->VC++目录->库目录。
2.2 项目右键属性->配置属性->链接器->常规->附加库目录。
3、代码中import "BaseDLL.lib"。
4、项目右键属性->配置属性->链接器->输入->附加依赖项。(是否缺少BaseDLL.lib)
5、项目->引用。
二、解决方案包另外两个项目(A、B)依赖BaseDLL,还可能是:
VS未检测到cpp文件的修改导致未编译,对该cpp文件单独ctrl+F7一下。
A.dll或B.dll未重新生成,先把A、B项目重新生成一下。
三、TestWindowDlg编译提示MyFunction __declspec(dllexport)。
原因是BaseDLL中对MyFunction的导入导出宏有问题,对于TestWindowDlg应该是__declspec(dllimport)。可以在BaseDLL添加一个include_basedll.h。
#ifdef _BUILD_IN_BaseDLL
#ifndef EXT_CLASS_BaseDLL
#define EXT_CLASS_BaseDLL AFX_CLASS_EXPORT
#endif
#else
#ifndef EXT_CLASS_BaseDLL
#define EXT_CLASS_BaseDLL AFX_CLASS_IMPORT
#endif
#endif
在pch.h或项目属性“预处理器定义”中定义_BUILD_IN_BaseDLL。
四、其它软件引发:
Incredibuild的BUG,新版本奇怪问题越来越多。
360杀毒把文件给杀了,请手动把解决方案目录添加到信任区,该恢复的恢复。
加密软件(如果你们用到了)把lib给加密了😂。