Qt下Link2019,Link2001错误的解决

本文详细介绍了如何解决在C++项目中遇到的引用外部符号解析失败的问题,包括添加SQL选项、修改项目设置、VS中添加头文件与lib文件的方法等。通过实践案例,读者可以轻松解决相关错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

main.obj:-1: error: LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QSqlDatabase::~QSqlDatabase(void)" (__imp_??1QSqlDatabase@@QAE@XZ),该符号在函数 __catch$_main$0 中被引用

main.obj:-1: error: LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QSqlQuery::~QSqlQuery(void)" (__imp_??1QSqlQuery@@QAE@XZ),该符号在函数 __catch$_main$0 中被引用

。。。。。

main.obj:-1: error: LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static char * QSqlDatabase::defaultConnection" (__imp_?defaultConnection@QSqlDatabase@@2PADA)

的错误可能是由于项目设置中需要使用SQL,所以需要添加SQL选项,做法为Qt5->Qt Project Setting->SQL选择SQL选项后正常。

OK.There is another way to solve this problem.You can add "QT += sql" on your pro file.


VS中添加文件夹中的头文件或lib文件是在项目--属性--配置属性--链接器--常规--添加库目录中将需要添加的头文件与lib文件所在的文件夹添加即可。


-------------------------2015.05.26.19:51

### Qt解决 LNK2019 链接错误 当遇到 `LNK2019` 错误时,通常意味着链接器无法找到某个函数或变量的定义。对于Qt项目中的此类问题,可以考虑以下几个方面来解决问题。 #### 检查源文件是否被编译 确保所有实现类的方法所在的 `.cpp` 文件都已加入到项目的构建过程中。如果缺少某些 `.cpp` 文件,则这些文件中定义的功能不会被编入最终可执行文件中,从而导致未解析外部符号错误[^1]。 ```qmake SOURCES += \ main.cpp \ matrix_sb.cpp # 确认此行存在并指向正确的 .cpp 文件路径 ``` #### 正确设置库依赖关系 另一个常见原因是静态库或动态链接库(DLL)及其导入库未能正确配置给链接器。前往 **Project->Build Settings->Linker->Additional Dependencies** 或者通过修改`.pro`文件添加必要的库名[^2]: ```qmake LIBS += -Lpath/to/library/directory -lmylibraryname ``` 这里 `-L` 参数指定了查找库文件的位置,而 `-l` 后跟的是不带前缀(lib)和扩展名(.dll, .a,.so等)的实际库名称。 #### 宏定义一致性 有时也会因为宏定义的不同而导致类似的链接失败情况发生。特别是当涉及到导出/导入 DLL 符号时(`__declspec(dllexport)` 和 `__declspec(dllimport)`), 应该保持一致性的宏定义方式以区分是在创建还是使用共享库[^3]。 ```cpp #ifdef MATRIX_SB_EXPORTS #define MATRIX_SB_API __declspec(dllexport) #else #define MATRIX_SB_API __declspec(dllimport) #endif class MATRIX_SB_API Matrix_sb { public: void init(); }; ``` 以上措施应该能够帮助定位并修复大多数情况下由 `LNK2019` 引起的问题。不过具体情况还需要根据实际开发环境和个人代码逻辑进一步排查原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值