无法解析的外部符号,这是一个非常常见的链接错误,造成这个错误的原因比较多,这里列几种容易忽略的原因:
1. 引用的函数有定义但没有实现,链接器找不到函数实现代码。
2. 引用的函数没有导出,请使用动态库导出关键字:__declspec(dllexport) 标识导出函数。
3. 函数虽然有导出,但是引用的时候没有加入输入库,在项目属性->链接器->输入->附加依赖项中引入lib文件。
4. 编译导出库和使用导出库的编译选项不一样,这是常容易忽略的地方,结果到处找原因耗费很多时间。常见的选项不一样有:
4.1 函数调用约定不 一样,这个必须是一样才能调用,选项位置在项目->配置属性->c/c++->调用约定,选项有:__cdecl (/Gd),__fastcall (/Gr),__stdcall (/Gz),这是最容易忽略的地方。
4.2 字符集选的不一样,有的选多字节字符,有的选Unicode,这个也必须一致,项目->常规->字符集。
4.3 是否引用了MFC,还是只使用了Windows标准库,项目->常规->MFC使用。
5. 混合编译c和c++代码,记得在c代码块中加以下代码:
#ifdef __cplusplus
extern "C" {
#endif
//此处为你的c代码
#ifdef __cplusplus } #endif
6. 由于c的标准的不同,如果提示错误:
error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
请记得将声明的任何变量放到代码的最前面,先声明再使用,不能在后面声明,否则搞得你一头雾水。