解决Qt“报无法定位程序输入点xxx于动态连接库“问题

今天,在使用Qt+VS2019编译工程时,弹出"无法定位程序输入点xxx于动态链接库"问题,如图(1)所示:

图(1) 报"无法定位程序输入点xxx于动态链接库"问题

出现这种问题的原因有很多:

  • (1) 工程Release/Debug,与lib的Release/Debug不一致;
  • (2)Qt的Path环境没有设置好,应该区分工程的32或64位,MSVC或MingW路径;
  • (3) 子类没有实现父类的虚函数,导致编译报错。

解决方法如下

1 将lib库版本与工程的版本保持一致

  • 若工程是Release版本的,则引用的lib要改成Release的;
  • 若工程师Debug版本的,则引用的lib要改成Debug的;
  • 即Release lib + Release vs.sln
  • Debug lib + Debug vs.sln

比如工程本身是Debug版本,而第三方lib库是Release的,则需要将工程改成Release版本,如图(2)所示:

在VS里,将菜单栏改成Release,右击工程 --》属性 --》也改成Release --》应用。

图(2)菜单栏和工程属性,要保持一致,要么都为Release,要么都为Debug

2 设置正确的Qt环境变量

Qt环境变量,包括2种:(A)Qt插件+VS环境,(B)纯Qt环境;

(A)、(B)这2种环境,不要同时配置到Path里。若同时配置到Path,编译器会无法识别,造成编译失败。

2.1 Qt插件+VS环境

若工程是Qt-addin插件+VS编译的,则选择MSVC环境变量;

64位 MSVC
html 复制代码
path = D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin;D:\Qt\Qt5.14.2\Tools\QtCreator\bin;

64位的msvc Qt环境,如图(3)所示:

图(3) Qt的64位MSVC路径

32位 msvc
html 复制代码
path = D:\Qt\Qt5.14.2\5.14.2\msvc2017\bin;D:\Qt\Qt5.14.2\Tools\QtCreator\bin;

32位的msvc Qt环境,如图(4)所示:

图(4) Qt的32位MSVC路径

2.2 纯Qt环境

若工程是纯Qt编译,即采用Qt Creator编译,则选择MingW环境。

64位 mingw64
html 复制代码
path = D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin;D:\Qt\Qt5.14.2\Tools\mingw730_64\bin;

64位的MIingW64路径,如图(5)所示:

图(5) Qt的64位MingW路径

32位 mingw32
html 复制代码
path = D:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin;D:\Qt\Qt5.14.2\Tools\mingw730_32\bin;

32位的MIingW32路径,如图(6)所示:

图(6) Qt的32位MingW路径

2.3 重启电脑

配置Qt的Path环境变量之后,要重启电脑,环境才生效。

按Alt+F4快捷键,选中"重启"下拉框即可重启。

3 实现父类的虚函数

有些lib库继承了一个虚函数类,这个虚函数需要在子类里手动实现。可以在子类里加一个同名的函数覆盖它,先保证编译通过,再去调试相应的子模块。

//父类: Father

cpp 复制代码
class Father {
public:
	Father() {}
	~Father() {}

	virtual void Print() = 0;
};

//子类:Child

cpp 复制代码
class Child :Father {
public:
	Child() {}
	~Child() {}

	//重写父类的虚函数
	void Print() { std::cout << "hello\n"; };
};
相关推荐
Code哈哈笑3 分钟前
【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
数据库·spring boot·后端·mysql·mybatis·交互
山海不说话4 分钟前
PyGame游戏开发(入门知识+组件拆分+历史存档/回放+人机策略)
开发语言·python·pygame
明月看潮生5 分钟前
青少年编程与数学 02-019 Rust 编程基础 11课题、类型系统
开发语言·青少年编程·rust·数据类型·编程与数学
Javatutouhouduan20 分钟前
线上问题排查:JVM OOM问题如何排查和解决
java·jvm·数据库·后端·程序员·架构师·oom
大锦终20 分钟前
【C++】unordered_map与set的模拟实现
开发语言·数据结构·c++·哈希算法
范纹杉想快点毕业34 分钟前
以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·windows·vscode·qt·visual studio
多多*1 小时前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
淡笑沐白1 小时前
SQL Server 与 Oracle 常用函数对照表
数据库·oracle·sqlserver
少了一只鹅1 小时前
c语言内存函数
c语言·开发语言
じ☆ve 清风°1 小时前
滑动窗口算法详解与C++实现
开发语言·c++·算法