MFC调用外部dll时,出现无法解析的外部符号的解决方法)
最近在一个MFC工程文件中调用了多个dll和lib文件,包括matlab和can连接文件,时常出现“无法解析的外部符号”的错误,特此记录解决方法。
通常出现这个问题的原因有以下几个:
1.没有导入相应的lib库文件。
2.类成员声明了,但是却没有定义。也可能是定义的与声明的不一致。
3.没有包含响应的头文件和源文件。
4.没有在项目属性页的链接器的命令行选项加入相应的类包。
5.没有在c++包含目录和库目录加入相应的类包路径。
6.dll的版本与平台不兼容,64位和32位的差别。
通常对于第三方的SDK一般只提供给我们DLL,并提供相应的头文件及LIB文件;这里的LIB文件是链接时需要的,它包含了DLL中函数的想关信息,不是静态编译产生的静态库,因此我们只需要在项目添加对这些LIB的依赖。
一般情况下按照项目--》属性--》配置属性--》链接器-》输入--》附加依赖项
的方式在其中加入所需库文件,注意把库文件写进去,每个库文件后加分号,同时在
“链接器--》常规--》附加库目录”中填入相应库所在目录。
为了保险可以在
VC++目录--》常规--》包含目录和VC++目录--》常规--》库目录中中填入相应库所在目录。
然后在工程文件中加入头文件#include "ControlCAN.h"
以及
#pragma comment(lib,"ControlCAN.lib")
如果完成这些操作之后还是存在无法解析的外部符号的问题,应该是版本与平台不兼容。将当前平台(win32/x64)替换成(x64/win32)再进行编译,一般就可以通过了。
需要再新的平台重新设置上述操作,并将目标计算机改为当前平台。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程