Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑

MingW下编译QWt 6.2.0

  1. 下载qwt最新版本,用git工具 git clone下载源码
    git clone https://git.code.sf.net/p/qwt/git qwt-git
    或者使用我下载的 qwt 2.6.0
    链接:https://pan.baidu.com/s/1KZI-L10N90TJobeqqPYBqw?pwd=pq1o
    提取码:pq1o

  2. 下载安装Qt 5.15.2
    链接:https://pan.baidu.com/s/1mpcVYjzjL0udYAh0TGjtrA?pwd=2sz5
    提取码:2sz5

  3. 用Qt 5.15.2 自带的Qt Creator 5.0.2打开qwt.pro文件
    在这里插入图片描述

  4. 编译前的参数修改(网上一找一大把)
    打开QMAKE_RPATHDIR *=$${QWT_INSTALL_LIBS}
    在这里插入图片描述
    注释掉src/qwtbuild下的qwtbuild.pri里的CONFIG += debug_and_release
    因为你的工程要链接的第三方库肯定是release版本的库了
    在这里插入图片描述
    classinclude下的qwtbuil下的qwtbuild.pri里的 CONFIG += debug_and_release也是要注释掉#
    在这里插入图片描述
    编译MSVC会编译不通过的原因,本质原因应该不是修改一个安装目录就可以了(以后来研究),把qwtconfig.pri下的QWT_INSTALL_PREFIX路径修改成自己Qt安装使用的编译器下的路径里的include里新建自己的qwt头文件目录(qwtbuld.pri和qwtconfig.pro虽然有多个,其实点进去就知道都是同一个,修改一处就都修改了)
    在这里插入图片描述

  5. 编译的顺序是先【执行qmake】,然后开始【构建】
    需要选择release版本,在构建里选择Release
    在这里插入图片描述

  6. qmake完成,及构建完成后,会在构建目录下生成编译文件xx.dll和xx.a文件
    7.

  7. 将qwt.dll和qwtd.dll放到本地的Qt 5.12.12安装目录的库目录中,这样基于Qt 5.12.12的自己的应用就可以使用qwt开发了,因为安装了qwt库
    在这里插入图片描述

  8. qwt的编译里还生成了designer.dll,如果将该designer.dll放到本地Qt 5.12.12的安装目录的designer插件中,那么在Qt开发中的designer里可以直接拖动使用qwt控件,那也是非常方便的。
    在这里插入图片描述
    放到本地Qt的designer插件目录中
    在这里插入图片描述

  9. 用Qt Creator新建自己的应用程序,用Qt Designer打开mainwindow.ui

在这里插入图片描述
在Qt设计师中左侧控件拉到最下面看到qwt控件,此处你可以兴奋一分钟,将qwt控件拖动到右边,然后保存,然后qmake你的工程,构建并运行,就把qwt安装并运行到了你的个人Qt工程中了
在这里插入图片描述
在这里插入图片描述

MSVC 下编译QWT 6.2.0

说实话在MingW下载编译qwt是比较智障无难度的,因为Qt的安装过程中会把MingW编译器一起安装了,所以在Qt构建工具中MingW编译器的选择也十分简单,一般不会出错,但是MSVC编译器是随着Visual Studio (VS2022 VS2017)安装的,所以Qt的构建工具中经常是默认的MSVC版本的项目构建是黄色感叹号,没法直接使用其新建Qt MSVC工程,所以如果你的Qt工具里Qt MSVC构建都还没有配置好,然后你用Qt Creator打开qwt.pro去编译MSVC版本的库,会遇到编译问题,所以先解决Qt构建问题。

  1. 我安装的是VS2022,所以编译器是MSVC2017,但是Qt构建里默认MSVC2017无法使用,cmake也是无法使用。
    在这里插入图片描述
    我的图片中MSVC2015 64bit编译可以构建那个纯粹是扯淡,因为我清楚我的本机是VS2022 MSVC2017不可能是MSVC2015,即便选择了MSVC2015,最后工程还是带黄色感叹哈,所以在编译器里进行配置
  2. 这个克隆的方法也是网上一抓一大把,其实原因很明显我就死死咬住我是MSVC2017就不会出错了
    在这里插入图片描述
    如果你选择C++里或C里列出的C++ Complier或C Complier会出问题,因为其实他们是MSVC2005,错得离谱,所以选中一个编译器然后点击右边的克隆
    在这里插入图片描述
    ABI里面选择自定义,然后MSVC2005就可以选择了,肯定是果断选择自己VS对应的编译器,我的是MSVC2017
    在这里插入图片描述
    确定OK之后,在Qt Creator新建项目,选择克隆的编译器的构建就可以创建你本机的MSVC版本Qt项目了。
  3. 回到编译qwt的MSVC版本,在构建的过程中可以看到是否是真正使用自己的编译器进行构建
    在这里插入图片描述
    像我的构建里是MSVC 64bit,所以qmake和构建就没有再报错。
  4. MSVC2017里把qwt的库,放到本地对应目录中
    在这里插入图片描述
    在这里插入图片描述
    放到本机MSVC的库目录中,说到这里不得不为Qt的设计点赞,这种用动态库dll扩展插件,来扩展功能,确实就是牛逼Plus。
    在这里插入图片描述
    把两个对应的lib文件放到Qt本地lib安装目录下
    在这里插入图片描述
    在这里插入图片描述

把designer下的qwt的designer插件也放到本地qt的designer设计师插件目录下
在这里插入图片描述
在这里插入图片描述
5. 新建Qt MSVC工程

在这里插入图片描述

在这里插入图片描述

# .pro里添加 qwt的配置
CONFIG += qwt
DEFINES += QT_DLL QWT_DLL
LIBS += -L"C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\lib" -lqwtd
LIBS += -L"C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\lib" -lqwt
INCLUDEPATH += D:\develop\qwt\qwt-git\src

在这里插入图片描述
在这里插入图片描述
6. 其实到这里很多时候已经完成了,但是这里很倔强,跟我开了个玩笑
在这里插入图片描述
: static_assert failed "Error in C++ Standard Library usage."
但是程序员天生就是对Bug兴奋,那就老套路了,挨字分析error总能找出问题所在
在这里插入图片描述
就是VS的编译器版本的问题,始终如一地选择自己本地自己确认的编译器版本,就不会有问题了

-------------------------2024-1-20---------------------------
在这里插入图片描述
看到clang的编译器错误,肯定是不合理的,我的就是MSVC2017,所以针对项目选了过来
在这里插入图片描述
新建了一个项目用msvc2017克隆版本编译器。
在这里插入图片描述
跟前面一样把ui用designer打开,然后拖几个qwt控件。我的qwt的头文件即src文件的目录修改了,所以最开始编译还报错找不到文件,然后改成了真实路径。
在这里插入图片描述

到这里所有问题都已经解决了。但是留下一个问题,我要把qwt的库及头文件打包我的个人项目3rdparty中,如何让cmake找到我的qwt package,程序员就是永远走在解决一个问题又开始下一个问题的路上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242112.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

匿名/箭头函数,立即执行函数IIFE;函数声明式和函数表达式

目录 匿名/箭头函数:简洁 继承上一层作用域链的this 不绑定arguments,用rest参数 rest 参数:...真正的数组 因为没有function声明,所以没有原型prototype,所以不能作为构造函数 当函数体只有一句时,可省 return ,…

【Linux第二课-权限】操作系统、Linux用户、Linux权限、Linux文件类型、粘滞位

目录 操作系统shell外壳为什么有shell外壳shell外壳是什么shell外壳工作原理 Linux用户root用户与非root用户root用户与普通用户的切换普通用户 --> root用户root用户 --> 普通用户普通用户 --> 普通用户对一条指令提升为root权限进行执行 Linux权限Linux中的权限角色…

Elasticsearch Windows部署-ELK技术栈

1、下载Elasticsearch、kibana、logstash 本文不介绍ELK相关原理知识,只记录部署操作过程 下载地址Past Releases of Elastic Stack Software | Elastic 选择同一版本,这里选择是当前最新版本8.11.3 解压放在同目录下,方便后续操作与使用 …

OpenCV-Python(51):基于Haar特征分类器的面部检测

目标 学习了解Haar 特征分类器为基础的面部检测技术将面部检测扩展到眼部检测等。 基础 以Haar 特征分类器为基础的对象检测技术是一种非常有效的对象检测技术(2001 年Paul_Viola 和Michael_Jones 提出)。它是基于机器学习的,通过使用大量的正负样本图像训练得到一个cascade_…

【大数据Hive】hive 行列转换使用详解

目录 一、前言 二、使用场景介绍 2.1 使用场景1 2.2 使用场景2 三、多行转多列 3.1 case when 函数 语法一 语法二 操作演示 3.2 多行转多列操作演示 四、多行转单列 4.1 concat函数 语法 4.2 concat_ws函数 语法 4.3 collect_list函数 语法 4.4 collect_set函…

【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态

步进电机控制 设计思路 电路设计: 选用AT89C51单片机作为电路核心部件,外加LM016L液晶显示屏作为显示,显示步进电机的Fast,Slow,Stop的三个状态将AT89C51单片机所选引脚与LM016L控制引脚相连,再将数据通…

龙芯+RT-Thread+LVGL实战笔记(30)——电子琴演奏

【写在前面】正值期末,笔者工作繁忙,因此本系列教程的更新频率有所放缓,还望订阅本专栏的朋友理解,请勿催更。笔者在此也简要声明几点: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等,因此这些模块的相关任务暂时无法给出经过验证的代码。其实,教程进行…

微电网优化MATLAB:遗传算法(Genetic Algorithm,GA)求解微电网优化(提供MATLAB代码)

一、微网系统运行优化模型 微电网优化是指通过对微电网系统中各个组件的运行状态进行监测和调节,以实现微电网系统的高效运行和能源利用的最大化。微电网是由多种能源资源(如太阳能、风能、储能等)和负载(如建筑、工业设备等&…

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(二)

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(二)。 技术架构是对某一技术问题(需求)解决方案的结构化描述,由构成解决方案的组件结构及之间的交互关系构成。广义上的技术架构是一系列涵盖多类技术问题设计方案的统称,例如部署方案、存储方案、缓存…

接口测试遇到500报错?别慌,你的头部可能有点问题

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

C#,入门教程(38)——大型工程软件中类(class)修饰词partial的使用方法

上一篇: C#,入门教程(37)——优秀程序员的修炼之道https://blog.csdn.net/beijinghorn/article/details/125011644 一、大型(工程应用)软件倚重 partial 先说说大型(工程应用)软件对源代码的文件及函数“…

NFS网络共享存储服务技术攻略

目录 一.NFS 1.定义 2.特点 3.原理 二.服务端NFS配置文件 1.主配置文件 2.文件格式 3.相关命令 三.实验:NFS共享存储服务配置 1.服务端安装nfs-utils和rpcbind软件包 2.服务端新建共享目录给权限 3.服务端修改配置文件/etc/exports 4.服务端关闭防火墙…

HTTP 协议和 TCP/IP 协议之间有什么区别?

HTTP(超文本传输协议)和TCP/IP(传输控制协议/互联网协议)是两种在互联网通信中广泛使用的协议,它们之间的区别和联系对许多人来说可能还不是很清晰,今天我们就带大家来一起了解一下HTTP和TCP/IP协议这2者之…

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…

虚拟机安装宝塔的坑

问题&#xff1a; 在虚拟机中centos7和centos8中安装宝塔之后&#xff0c;无法访问面板。 解决&#xff1a; 1.先关闭防火墙&#xff08;如果本机能够ping通相关端口&#xff0c;则不用关闭防火墙&#xff09; 2.最新的宝塔会自动开启ssl协议&#xff0c;需要手动关闭。…

UE5 蓝图编辑美化学习

虚幻引擎中干净整洁蓝图的15个提示_哔哩哔哩_bilibili 1.双击线段成节点。 好用&#xff0c;爱用 2.用序列节点 好用&#xff0c;爱用 3.用枚举。 好用&#xff0c;能避免一些的拼写错误 4.对齐节点 两点一水平线 5.节点上下贴节点 &#xff08;以前不懂&#xff0c;现在经常…

Node.js基础知识点(四)

本节介绍一下最简单的http服务 一.http 可以使用Node 非常轻松的构建一个web服务器&#xff0c;在 Node 中专门提供了一个核心模块&#xff1a;http http 这个模块的就可以帮你创建编写服务器。 1. 加载 http 核心模块 var http require(http) 2. 使用 http.createServe…

new Handler(getMainLooper())与new Handler()的区别

Handler 在Android中是一种消息处理机制。 new Handler(); 创建handler对象&#xff0c;常用在已经初始化了 Looper 的线程中调用这个构造函数&#xff08;即非主线程&#xff09;&#xff0c;如果感觉不好理解&#xff0c;可以把Handler handler new Handler() 理解为常用在…

C和指针课后答案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 第八章课后答案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…

SpringMVC-.xml的配置

文章目录 一、对pom.xml的配置二、对web.xml1.第一种方式2. 第二种方式 三、对SpringMVC.xml的配置 一、对pom.xml的配置 <!-- 打包成war包--><packaging>war</packaging> <dependencies><!-- SpringMVC--><dependency><gro…