VS2017编译单CPP文件时触发LNK2019未解析外部符号错误
解决VS2017中LNK2019未解析外部符号错误
问题根源
你的代码存在导入导出声明不规范,且未正确链接DLL依赖库的问题:
- 手动在CPP文件中写
__declspec(dllimport),与头文件的dllexport声明割裂,易导致符号匹配错误 - 当前项目未链接到
fooDLL对应的导入库(.lib文件),链接器找不到Print()函数的实现
解决方案
1. 规范导入导出的宏定义
修改外部头文件,用预处理器宏统一管理导入导出,避免手动声明错误:
#pragma once #ifdef FOO_EXPORTS #define FOO_API __declspec(dllexport) #else #define FOO_API __declspec(dllimport) #endif namespace foo { FOO_API void Print(); }
- 编译
fooDLL项目时,在项目属性的预处理器定义中添加FOO_EXPORTS,此时头文件自动使用dllexport - 编译当前控制台项目时,无需定义
FOO_EXPORTS,头文件自动使用dllimport
2. 修改当前项目的CPP代码
删除手动的dllimport声明,改为包含规范后的头文件:
#include "../path/to/foo_header.h" // 替换为实际的头文件路径 void main() { foo::Print(); }
3. 链接DLL导入库
确保当前项目链接到foo DLL生成的.lib文件:
- 方法1:右键项目 → 属性 → 链接器 → 输入 → 附加依赖项,添加
foo.lib - 方法2:在CPP文件开头添加指令(需确保
.lib文件在项目搜索路径内):#pragma comment(lib, "foo.lib")
4. 统一编译配置
确认foo DLL项目和当前项目的编译配置一致:
- 同为Debug/Release模式
- 同为x86/x64平台
内容的提问来源于stack exchange,提问作者mmd
相关产品推荐
相关产品推荐

