当前位置: 首页 > news >正文

vs2017 编译Qt 5.11.2 源码

SDK 10.0.22000.194

有 2种编译方式 ,第二种 看下面

方式一:

1、问题描述:

使用VS编译程序时,运行库选择多线程(/MT),表示采用多线程静态release的方式进行编译。

但是,发现编译是不能通过的。

qtmain.lib(qtmain_win.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”

原因在于安装Qt时默认使用的是动态库,而且官方并没有提供编译好的静态库下载。 但我们可以自己下载Qt源码下来,自己重新编译,生成静态库,这样我们开发的Qt程序也就能完成静态的编译了。以后也就只需要编译成一个exe

2、下载源码包

首先,我们需要从Qt官网(地址:http://download.qt.io/archive/qt/5.11/5.11.2/single/ )下载对应的Qt源码。在这里,我以在Windows下编译Qt程序为例。

3、编译环境

以下是编译时需要的工具,在编译之前,请务必安装! 安装都比较简单。这里直接给出官网下载的链接。最后记得添加到环境变量(安装时把‘’添加到PATH环境“选项勾起就可以了,或者在安装后手动添加也可以)。

  • Ruby version 1.9.3 or later
  • Perl version 5.12 or later
  • Python version 2.7.5 or later
  • JOM

建议安装jom,来替换nmake进行编译,可以充分利用CPU多核的能力,否则估计你会中途吐血的。 jom是nmake的多线程版,nmake不支持多线程,单线程编译速度太慢了。

4、编译源码库

以上东西都准备好以后,接下来我们可以开始编译源码了。

在编译之前记得先将所有的杀毒软件关掉(避免误杀)。

然后进入解压后的Qt源码文件夹下的qtbase/mkspecs下,找到win32-msvc文件夹。

另外顺便说下,如果是想编译较早些时候的Qt源码,源码下载下来后会发现里面没有这个文件夹。而是这样的:

这时候只需要根据你安装的Qt版本进行选择就可以了。

进入选中的文件夹之后,找到qmake.conf文件并使用文本编辑器打开。

我们再根据它include的内容定位到相应的文件。

include(../common/msvc-desktop.conf)

找到相应的文件后,修改其内容。在这里也就是msvc-desktop.conf这个文件。

找到以下标志。将原来的:

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd

修改成:

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd

即将MD改成MT,MDd改成MTd,动态改成静态

在开始菜单中,找到“适用于 VS 2017 的 x64 本机工具命令提示“ 或者 “x64 Native Tools Command Prompt for VS 2017”。

将当前目录切换到源码解压后的目录下。比如我的是在E盘下的qt-everywhere-src-5.11.2这个文件夹。

接下来,将执行关键的几个命令。首先执行configure命令。复制并执行以下命令:

configure.bat -mp -confirm-license -opensource -platform win32-msvc -debug-and-release -static -force-asserts -prefix E:\Qt5.11.2\Qt-msvc2017-x64-static -static-runtime -silent -opengl desktop -qt-sqlite -qt-pcre -qt-zlib -qt-freetype -qt-harfbuzz -qt-libpng -qt-libjpeg -nomake examples -nomake tests

命令解释含义

该命令是在Windows平台上用于编译和配置Qt源代码的批处理文件。让我们逐步解析命令的各个选项和参数:configure.bat: 这是Qt源代码配置文件的名称。
-mp: 这个选项用于启用多处理器编译,以提高编译速度。
-confirm-license: 这个选项用于确认接受Qt的许可协议。
-opensource: 这个选项用于指定使用开源版本的Qt。
-platform win32-msvc: 这个选项用于指定目标平台为Windows,并使用Microsoft Visual C++编译器。
-debug-and-release: 这个选项用于同时构建调试和发布版本的Qt库。
-static: 这个选项用于生成静态链接库,以便其他应用程序可以将其静态链接到自己的代码中。
-force-asserts: 这个选项用于强制进行断言检查,可以在编译时捕获潜在的错误。
-prefix E:\Qt5.11.2\Qt-msvc2017-x64-static: 这个选项用于指定生成的Qt库文件的安装目录。
-static-runtime: 这个选项用于在静态链接库中包含运行时组件,以便其他应用程序可以独立运行而无需安装Visual C++运行时库。
-silent: 这个选项用于静默安装,即在安装过程中不显示任何图形界面。
-opengl desktop: 这个选项用于启用OpenGL支持,并针对桌面版进行优化。
-qt-sqlite: 这个选项用于启用SQLite数据库支持。
-qt-pcre: 这个选项用于启用Perl兼容的正则表达式库支持。
-qt-zlib: 这个选项用于启用zlib压缩库支持。
-qt-freetype: 这个选项用于启用FreeType字体渲染库支持。
-qt-harfbuzz: 这个选项用于启用HarfBuzz文本渲染库支持。
-qt-libpng: 这个选项用于启用libpng图像库支持。
-qt-libjpeg: 这个选项用于启用libjpeg图像库支持。
-nomake examples: 这个选项用于禁用构建示例应用程序。
-nomake tests: 这个选项用于禁用构建测试应用程序。总结起来,该命令用于配置和编译Qt源代码,生成静态链接库和其他功能,并将其安装在指定的目录中。

· 其中 -platform win32-msvc 在前面也有提到过的,根据我们安装Qt的版本选择即可; · -static 表示编译静态库; · E:\Qt5.11.2\Qt-msvc2017-x64-static 是编译完后的安装目录,此目录不需要事先创建,建议路径不要太长。 这个过程不需要很久,执行完结果如图:

执行jom命令之前需要到环境变量 path 里面把jom的文件目录配置进去

执行完configure之后,输入编译命令:

  1. jom /J 4

只输入jom也可以,这样会使用所有CPU核心,加上/J参数可以使用指定线程数编译,例如上述命令使用4线程编译。

若没有jom就是用微软自带编译命令nmake,不过nmake不能多线程编译,速度会很慢:

  1. nmake

编译完成之后就可以安装了。

如果你是用的jom进行的编译,使用下列命令安装:

 2.jom install

如果是nmake:

 2.nmake install

如果没有意外,那么我们就会在之前设定好的路径下看到编译好的文件。

至此,整个Qt源码编译过程也就结束了(过程说简单也简单,但我却搞了两三天,就因为前面环境没搭好) 但别高兴得太早,这还没结束呢。。我们必须得建立一个测试程序运行起来才算成功!

4、安装和配置

VS2017中Qt插件安装教程

点击菜单栏上的“Qt VS Tools > Qt Options”打开Qt选项窗口;

然后将我们编译好的Qt版本(E:\Qt5.11.2\Qt-msvc2017-x64-static)添加进来。

我们创建一个Qt应用程序进行测试。

整理遇到的问题。

使用Release方式编译,编译不通过! 错误一:

错误一:

Qt5Core.lib(qobject.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(main.obj 中)

原因及解决方法:

  • 因为我们编译的Qt5.11.2的VC运行库是MT和MTd,工程向导创建的缺省是MD和MDd。也就是我们需要把运行库对应的值改了。

错误二:

LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

原因及解决方法:

  • 在同一个项目中,所有的源文件必须链接相同的VC运行时库。如果某一文件用了MTd版本,而其他文件用MT版本的库,也就是说用了不同的库,就会导致这个警告的出现。 添加一下命令行可解决:

/NODEFAULTLIB:“libcmt.lib”


错误三:

Qt5Core.lib(qglobal.obj) : error LNK2019: 无法解析的外部符号 gethostname,该符号在函数 “public: static class QString __cdecl QSysInfo::machineHostName(void)” (?machineHostName@QSysInfo@@SA?AVQString@@XZ) 中被引用 Qt5Core.lib(qglobal.obj) : error LNK2019: 无法解析的外部符号 WSAStartup,该符号在函数 “public: __cdecl QWindowsSockInit::QWindowsSockInit(void)” (??0QWindowsSockInit@@QEAA@XZ) 中被引用 Qt5Core.lib(qglobal.obj) : error LNK2019: 无法解析的外部符号 WSACleanup,该符号在函数 “public: __cdecl QWindowsSockInit::~QWindowsSockInit(void)” (??1QWindowsSockInit@@QEAA@XZ) 中被引用

原因及解决方法: 显然,这是因为有些依赖库我们没添加好~

附加库目录改成:Undefined control sequence \lib(QTDIR)\plugins\imageformats;

附加依赖项改成:qtmain.lib;qwindows.lib;Qt5Widgets.lib;Qt5Core.lib;Qt5Gui.lib;Qt5PlatformCompositorSupport.lib;Qt5EventDispatcherSupport.lib;Qt5FontDatabaseSupport.lib;Qt5ThemeSupport.lib;Qt5WindowsUIAutomationSupport.lib;qgif.lib;qicns.lib;qico.lib;qjpeg.lib;qsvg.lib;qtga.lib;qtiff.lib;qwbmp.lib;qwebp.lib;qtfreetype.lib;qtharfbuzz.lib;qtlibpng.lib;qtopenwnn.lib;qtpcre2.lib;qttcime.lib;winspool.lib;shlwapi.lib;rpcrt4.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;glu32.lib;opengl32.lib;gdi32.lib;kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;mpr.lib;%(AdditionalDependencies)

  • 在main.cpp文件中加入代码:
    #pragma comment(lib, "version.lib")#pragma comment(lib, "Netapi32.lib")#pragma comment(lib, "userenv.lib")#pragma comment(lib, "msvcrtd.lib")#pragma comment(lib, "Dwmapi.lib")

错误四:

qt.qpa.plugin: Could not find the Qt platform plugin “windows” in “” This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

原因及解决方法:

插件无法加载,加载plugin的办法: 使用宏 Q_IMPORT_PLUGIN,在main.cpp中增加代码如下:

	#include <QtCore/QtPlugin>Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

继续执行,发现可以了~ 成功了!

方式二:

用VS2017编译Qt 5.15.x静态库

一些莫名其妙的原因要升级到Qt5,耗时几天,总结如下:

第1步:下载源码包:qtbase-everywhere-opensource-src-5.15.x.zip

第2步:安装下面程序:strawberry-perl-5.x.x; python-3.x.x; rubyinstaller-devkit-3.23.x.x

第3步:解压源码包到目录,如:\src-5.15\qtbase\,修改\mkspecs\common\msvc-desktop.conf:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd 

第4步:打开x86 Native Tools Command Prompt for VS2017,进入源码目录执行:

configure -prefix E:\Qt5.11.2\Qt-msvc2017-x64-static -static -release -opensource -confirm-license -nomake tests -nomake examples

第4步:执行nmake,开始编译 。。。

第5步:执行nmake install,开始安装。。。

说明:

1. 建议使用VS2017或之前版本编译,否则配置时Qt 5.15.x可能无法识别

2. Qt5开始,源码树被划分多个子模块,可以单独编译(完整的源码包约有900多Mb)

3. 安装perl,ruby后,确保环境变量被设置,命令行执行: 

perl -version 
ruby --version

4. 编译64位,运行x64 Native Tools Command Prompt,其它步聚相同

5. configure加上: -prefix 指定安装目录,默认是:C:\Qt\Qt-5.15.x,此目录不可更改,除非重新编译。Qt-VSAddin 打开工程时需要查找QT_INSTALL_PREFIX宏。

6. config_help.txt包含完成的配置选项,config.summary文件中包含配置后选项,修改配置后configure加上-recheck-all

7. 重新编译前先执行nmake clean

遇到的问题:

1. 编译dbus出错,configure加上: -no-dbus 不编译Qt D-Bus模块,还是报错:qdbusxml2cpp.cpp(83): error,找到include/qt5/QtCore/qconfig.h增加如下内容:

#if defined(QT_NO_DBUS) && defined(QT_DBUS)
# undef QT_NO_DBUS
#elif !defined(QT_NO_DBUS) && !defined(QT_DBUS)
# define QT_NO_DBUS
#endif

2. 报错:缺少flex,安装WinFlexBison,修改win_flex.exe文件名为flex.exe,设置环境:set path=%PATH%;d:\WinFlexBison

3. 报错:缺少llvm-cofig,安装LLVM(注意需对应Qt编译位数),发现没有llvm-config,下载llvm源码包单独编译tools其中的llvm-config,放到LLVM/bin

编译子模块qttools:

第1步:下载源码包:qttools-everywhere-src-5.15.x.zip

第2步:解压源码包到目录:如:\src-5.15\qttools

第3步:安装LLVM, 添加环境变量LLVM_INSTALL_DIR到安装目录:set LLVM_INSTALL_DIR=d:\LLVM

第4步:设置qmake到环境变量,进入qttools子目录执行:

qmake
nmake
nmake install

相关文章:

vs2017 编译Qt 5.11.2 源码

SDK 10.0.22000.194 有 2种编译方式 &#xff0c;第二种 看下面 方式一: 1、问题描述&#xff1a; 使用VS编译程序时&#xff0c;运行库选择多线程&#xff08;/MT&#xff09;&#xff0c;表示采用多线程静态release的方式进行编译。 但是&#xff0c;发现编译是不能通过的…...

【SpringBoot3+Vue3】四【实战篇】-前端(vue基础)

目录 一、项目前置知识 二、使用vscode创建 三、vue介绍 四、局部使用vue 1、快速入门 1.1 需求 1.2 准备工作 1.3 操作 1.3.1 创建html 1.3.2 创建初始html代码 1.3.3 参照官网import vue 1.3.4 创建vue应用实例 1.3.5 准备div 1.3.6 准备用户数据 1.3.7 通过…...

element ui修改select选择框背景色和边框色

一、修改选择框的背景色和边框色 style部分 .custom-select /deep/ .el-input__inner {color: #fff!important;border: 1px solid #326AFF;background: #04308D !important; } html部分 <el-select class"custom-select" v-model"dhvalue" placeholde…...

软件测试人员提问常用的ChatGPT通用提示词模板

如何设计有效的软件测试用例&#xff1f; 如何运用自动化测试工具进行软件测试&#xff1f; 如何进行软件的功能测试、性能测试和安全测试&#xff1f; 如何评估软件测试的质量和覆盖范围&#xff1f; 软件测试有哪些常见的缺陷和错误&#xff0c;如何识别和解决&#xff1…...

【开源】基于JAVA的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…...

Jenkins代码检测和本地静态检查

1&#xff1a;Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具&#xff1b;Jenkins自动化部署可以解决集成、测试、部署等重复性的工作&#xff0c;工具集成的效率明显高于人工操作&#xff1b;并且持续集成可以更早的获取代码变更的信息&#xff0c;从而更早的进入测…...

从0开始学习JavaScript--JavaScript 字符串与文本内容使用

JavaScript中的字符串和文本内容处理是前端开发中的核心技能之一。本文将深入研究字符串的创建、操作&#xff0c;以及文本内容的获取、修改等操作&#xff0c;并通过丰富的示例代码&#xff0c;帮助读者更全面地了解和应用这些概念。 JavaScript 字符串基础 字符串是JavaScr…...

Linux--网络概念

1.什么是网络 1.1 如何看待计算机 我们知道&#xff0c;对于计算机来说&#xff0c;计算机是遵循冯诺依曼体系结构的&#xff08;即把数据从外设移动到内存&#xff0c;再从内存到CPU进行计算&#xff0c;然后返回内存&#xff0c;重新读写到外设中&#xff09;。这是一台计算机…...

C# 中的 Math 数学函数

C# 中的 Math 类提供了许多数学函数&#xff0c;用于执行各种常见的数学运算。以下是 Math 类中的一些常用方法&#xff1a; Math 数学函数 Abs: 返回指定数字的绝对值Acos: 返回指定数字的反余弦值&#xff08;弧度&#xff09;Asin: 返回指定数字的反正弦值&#xff08;弧度&…...

mybatis之主键返回

1.在mybatis的xml中加入 <insert id"insertUser" keyProperty"id" useGeneratedKeys"true" parameterType"com.UserAndOrder"> insert into Tuser(userName,passWord) values (#{userName},#{passWord} ) </insert&…...

ChatGpt3.5已经应用了一段时间,分享一些自己的使用心得.

首先ChatGpt3.5的文本生成功能十分强大&#xff0c;但是chatgpt有一些使用规范大家需要注意&#xff0c;既然chat是一种工具&#xff0c;我们就需要学会它的使用说明&#xff0c;学会chatgpt的引用语句&#xff0c;会极大的方便我们的使用。我们需要做以下的准备。 明确任务和目…...

有趣的按钮分享

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 广告打完&#xff0c;我们进入正题&#xff0c;先看效果&#xff1a; 废话不多&#xff0c;上源码&#xff1a; <button class&quo…...

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection

发表时间&#xff1a;2023年3月5日 论文地址&#xff1a;https://arxiv.org/abs/2208.09686 项目地址&#xff1a;https://github.com/YuHengsss/YOLOV 视频物体检测&#xff08;VID&#xff09;具有挑战性&#xff0c;因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…...

如何将图片转为excel或word?(客户端)

演示软件&#xff1a;金鸣表格文字识别大师3.6.1&#xff08;新版本界面可能会略有不同&#xff09; 第一部分 将图片转为excel或文表混合的word 一般的软件要将图片转为可编辑的excel&#xff0c;都需要待识别的图片要有明显清晰的表格线&#xff0c;但我们程序现已克服了这…...

Linux网络——HTTP

一.应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层. 我们上一次写的网络版本计算器就是一个应用层的网络程序。 我们约定了数据的读取&#xff0c;一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是应…...

ElasticSearch综合练习题,ES为8版本,使用Kibana运行语句

文章目录 前言一、ES查询集群情况二、ES索引习题查询所有索引查询单个索引 三、ES增删改查数据单条处理批量处理 四、雇员查询练习题五、学生查询练习题六、商品信息联系题其他&#xff1a;一问一答参考文档 前言 ES8版本没有type概念&#xff0c;所以语法可能会与其他版本有差…...

Java方法中不使用的对象应该手动赋值为NULL吗?

在java方法中&#xff0c;不使用的对象是否应该手动赋值为null&#xff1f;我们先来通过一个示例看一下。 垃圾回收示例一 public class GuoGuoTest {public static void main(String[] args) {byte[] placeholder new byte[64 * 1024 * 1024];System.gc();} } 上面代码向内…...

Mysql主从搭建

Mysql主从搭建 1.Mysql下载1.1 查看操作系统2.2 下载mysql安装包 2.Mysql安装2.1 解压2.2 目录重命名2.3 创建data&#xff0c;存储文件2.4 创建用户组2.5 授权用户2.6 配置环境变量2.7 编辑my.cnf2.8 创建相关目录和文件2.9 初始化数据库2.10 复制mysql.server到/etc/init.d/下…...

WPF程序给按钮增加不同状态的图片

首先我们在资源里添加几个图片&#xff0c;Up&#xff0c;Over和Down状态。 然后我们创建一个Style。默认我们的背景设置成Up 然后在Triggers里添加代码&#xff0c;当Property&#xff1a;IsMouseOver为True的时候更换成Over&#xff1b;当Property&#xff1a;IsPressed为Tr…...

Java编程陷阱(三)

陷阱11:不要使用StringBuffer类来拼接字符串 StringBuffer是Java中的一个类,它可以表示一个可变的字符串,也就是可以对字符串进行修改和追加的操作,比如使用append或insert方法来拼接字符串。有时候,我们需要使用StringBuffer类来拼接字符串,比如在循环中动态地构建一个字…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...