VsCode编译wxWidgets的HelloWorld

news2024/11/16 18:53:34

wxWidgets 环境搭建

在wxWidgets 官网下载页面点击Download Windows Binaries选择TDM-GCC 10.3MinGW-w64 8.1下的头文件和开发包进行下载。这儿我们会用两种 gcc 编译器进行对比,所以下载 2 个种编译器对应的库文件。正常只需根据自己安装的编译器下载对应的 1 种库文件即可。

将下好的文件解压到 wxWidgets 的根目录(这儿以D:\wxWidgets为例),解压后的目录结构如下:

/d/wxWidgets
├── wxMSW-3.2.4_gcc1030TDM_Dev          TDM-GCC 10.3 编译32位应用程序对应的库头文件的dll文件
│   ├── include
│   │   ├── msvc
│   │   └── wx
│   └── lib
│       └── gcc1030TDM_dll
│          ├── mswu
│          └── mswud
├── wxMSW-3.2.4_gcc1030TDM_x64_Dev      TDM-GCC 10.3 编译64位应用程序对应的库头文件的dll文件
│   ├── include
│   │   ├── msvc
│   │   └── wx
│   └── lib
│       └── gcc1030TDM_x64_dll
│           ├── mswu
│           └── mswud
├── wxMSW-3.2.4_gcc810_Dev              MinGW-w64 8.1.0 编译32位应用程序对应的库头文件的dll文件
│   ├── include
│   │   ├── msvc
│   │   └── wx
│   └── lib
│       └── gcc810_dll
│           ├── mswu
│           └── mswud
└── wxMSW-3.2.4_gcc810_x64_Dev          MinGW-w64 8.1.0 编译64位应用程序对应的库头文件的dll文件
    ├── include
    │   ├── msvc
    │   └── wx
    └── lib
        └── gcc810_x64_dll
            ├── mswu
            └── mswud

注:include 目录下的msvc是给 VC 编译器使用的,现在我们使用 gcc 编译器。所以不应将 msvc 目录加入头文件搜索路径中去。

将所有 lib/*_dll 目录添加到环境变量 Path 中

GCC 环境搭建

MinGW-w64 8.1.0

从MinGW-w64 下载页选择下载以下文件:

  • i686-win32-sjlj 下载后的文件为: i686-8.1.0-release-win32-sjlj-rt_v6-rev0 32 位程序对应的编译器
  • x86_64-win32-seh 下载后的文件为:x86_64-8.1.0-release-win32-seh-rt_v6-rev0 64 位程序对应的编译器
  • x86_64-posix-sjlj 下载后的文件为:x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0 (仅为后面实验用)

将下载的文件解压到 MinGW-w64 安装目录(这儿以D:\MinGW-w64为例),目录结构如下:

/d/mingw-w64
├── i686-8.1.0-release-win32-sjlj-rt_v6-rev0
│   └── mingw32
│       ├── bin
│       ├── etc
│       ├── i686-w64-mingw32
│       ├── include
│       ├── lib
│       ├── libexec
│       ├── licenses
│       ├── opt
│       └── share
├── x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0
│   └── mingw64
│       ├── bin
│       ├── etc
│       ├── include
│       ├── lib
│       ├── libexec
│       ├── licenses
│       ├── opt
│       ├── share
│       └── x86_64-w64-mingw32
└── x86_64-8.1.0-release-win32-seh-rt_v6-rev0
    └── mingw64
        ├── bin
        ├── etc
        ├── include
        ├── lib
        ├── libexec
        ├── licenses
        ├── opt
        ├── share
        └── x86_64-w64-mingw32

将所有的 bin 目录添加到环境变量 path 中

TDM-GCC 10.3

  • 从64 位 TDM-GCC 下载页面下载tdm64-gcc-10.3.0-2.exe 作为 64 位程序的编译器
  • 从32 位 TDM-GCC 下载页面下载tdm-gcc-10.3.0.exe 作为 32 位程序的编译器

将下载的两个文件点击安装到 TDM-GCC 根目录(这儿以D:\TDM-GCC为例)安装后目录结构如下:

/d/Tdm-gcc
├── TDM-GCC-32
│   ├── __installer
│   ├── bin
│   ├── gdb32
│   ├── include
│   ├── lib
│   ├── libexec
│   ├── mingw32
│   ├── share
│   └── var
└── TDM-GCC-64
    ├── __installer
    ├── bin
    ├── gdb64
    ├── include
    ├── lib
    ├── libexec
    ├── share
    └── x86_64-w64-mingw32

创建 HelloWorld 工程

源文件

创建一个工程目录,并在该目录下创建HelloWorld.cpp文件

// Start of wxWidgets "Hello World" Program
#include <wx/wx.h>

class MyApp : public wxApp
{
public:
    bool OnInit() override;
};

wxIMPLEMENT_APP(MyApp);

class MyFrame : public wxFrame
{
public:
    MyFrame();

private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};

enum
{
    ID_Hello = 1
};

bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}

MyFrame::MyFrame()
    : wxFrame(nullptr, wxID_ANY, "Hello World")
{
    wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                     "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);

    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append(menuFile, "&File");
    menuBar->Append(menuHelp, "&Help");

    SetMenuBar( menuBar );

    CreateStatusBar();
    SetStatusText("Welcome to wxWidgets!");

    Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
    Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
    Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}

void MyFrame::OnExit(wxCommandEvent& event)
{
    Close(true);
}

void MyFrame::OnAbout(wxCommandEvent& event)
{
    wxMessageBox("This is a wxWidgets Hello World example",
                 "About Hello World", wxOK | wxICON_INFORMATION);
}

void MyFrame::OnHello(wxCommandEvent& event)
{
    wxLogMessage("Hello world from wxWidgets!");
}

VsCode 配置文件

配置 wxWidgets 目录

在工程文件夹的.vscode目录下的settings.json文件中添以下配置:

{
  "wxWidgets_gcc810": {
    // MinGW-w64 编译32位程序时的库文件和头文件
    "include_path": "D:\\wxWidgets\\wxMSW-3.2.4_gcc810_Dev\\include",
    "setup_path": "D:\\wxWidgets\\wxMSW-3.2.4_gcc810_Dev\\lib\\gcc810_dll\\mswu",
    "lib_path": "D:\\wxWidgets\\wxMSW-3.2.4_gcc810_Dev\\lib\\gcc810_dll"
  },
  "wxWidgets_gcc810_x64": {
    // MinGW-w64 编译64位程序时的库文件和头文件
    "include_path": "D:\\wxWidgets\\wxMSW-3.2.4_gcc810_x64_Dev\\include",
    "setup_path": "D:\\wxWidgets\\wxMSW-3.2.4_gcc810_x64_Dev\\lib\\gcc810_x64_dll\\mswu",
    "lib_path": "D:\\wxWidgets\\wxMSW-3.2.4_gcc810_x64_Dev\\lib\\gcc810_x64_dll"
  },
  "wxWidgets_tdmgcc": {
    // TDM-GCC 编译32位程序时的库文件和头文件
    "include_path": "D:/wxWidgets/wxMSW-3.2.4_gcc1030TDM_Dev/include",
    "setup_path": "D:/wxWidgets/wxMSW-3.2.4_gcc1030TDM_Dev/lib/gcc1030TDM_dll/mswu",
    "lib_path": "D:/wxWidgets/wxMSW-3.2.4_gcc1030TDM_Dev/lib/gcc1030TDM_dll"
  },
  "wxWidgets_tdmgcc_x64": {
    // TDM-GCC 编译64位程序时的库文件和头文件
    "include_path": "D:/wxWidgets/wxMSW-3.2.4_gcc1030TDM_x64_Dev/include",
    "setup_path": "D:/wxWidgets/wxMSW-3.2.4_gcc1030TDM_x64_Dev/lib/gcc1030TDM_x64_dll/mswu",
    "lib_path": "D:/wxWidgets/wxMSW-3.2.4_gcc1030TDM_x64_Dev/lib/gcc1030TDM_x64_dll"
  }
}
配置 C/C++ 环境

在工程文件夹的.vscode目录下的c_cpp_properties.json文件中添以下配置:

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": [
        "${workspaceFolder}/**",
        "${config:wxWidgets_gcc810.include_path}",
        "${config:wxWidgets_gcc810.setup_path}"
      ],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "compilerPath": "D:/MinGW-W64/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe",
      "cStandard": "c17",
      "cppStandard": "gnu++14",
      "intelliSenseMode": "windows-gcc-x86"
    }
  ],
  "version": 4
}

主要添了头文件路 ${config:wxWidgets_gcc810.include_path} 对应 settings.json 文件下的 wxWidgets_gcc810 配置下的 include_path 对应的路径,
${config:wxWidgets_gcc810.setup_path} 对应 settings.json 文件下的 wxWidgets_gcc810 配置下的 setup_path 对应的路径

配置编译任务

在工程目录的.vscode文件夹下添加task.json文件:

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "MinGW-W64-W64 32位编译器生成32位应用程序",
      "command": "D:/MinGW-W64/i686-8.1.0-release-win32-sjlj-rt_v6-rev0/mingw32/bin/g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "-s",
        "-I${config:wxWidgets_gcc810.include_path}",
        "-I${config:wxWidgets_gcc810.setup_path}",
        "-mwindows",
        "-L${config:wxWidgets_gcc810.lib_path}",
        "-lwxbase32u",
        "-lwxmsw32u_core"
      ],
      "options": {
        "cwd": "D:/MinGW-W64/i686-8.1.0-release-win32-sjlj-rt_v6-rev0/mingw32/bin/"
      },
      "problemMatcher": ["$gcc"],
      "group": "build",
      "detail": "编译器: D:/MinGW-W64/i686-8.1.0-release-win32-sjlj-rt_v6-rev0/mingw32/bin/g++.exe"
    },
    {
      "type": "cppbuild",
      "label": "MinGW-W64-W64 64位编译器生成64位应用程序",
      "command": "D:/MinGW-W64/x86_64-8.1.0-release-win32-seh-rt_v6-rev0/mingw64/bin/g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}_x64.exe",
        "-s",
        "-I${config:wxWidgets_gcc810_x64.include_path}",
        "-I${config:wxWidgets_gcc810_x64.setup_path}",
        "-mwindows",
        "-L${config:wxWidgets_gcc810_x64.lib_path}",
        "-lwxbase32u",
        "-lwxmsw32u_core"
      ],
      "options": {
        "cwd": "D:/MinGW-W64/x86_64-8.1.0-release-win32-seh-rt_v6-rev0/mingw64/bin"
      },
      "problemMatcher": ["$gcc"],
      "group": "build",
      "detail": "编译器: D:/MinGW-W64/x86_64-8.1.0-release-win32-seh-rt_v6-rev0/mingw64/bin/g++.exe"
    },
    {
      "type": "cppbuild",
      "label": "MinGW-W64-W64 64位编译器生成32位应用程序",
      "command": "D:/MinGW-W64/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}_x64_32.exe",
        "-m32",
        "-s",
        "-I${config:wxWidgets_gcc810.include_path}",
        "-I${config:wxWidgets_gcc810.setup_path}",
        "-mwindows",
        "-L${config:wxWidgets_gcc810.lib_path}",
        "-lwxbase32u",
        "-lwxmsw32u_core"
      ],
      "options": {
        "cwd": "D:/MinGW-W64/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin"
      },
      "problemMatcher": ["$gcc"],
      "group": "build",
      "detail": "编译器: D:/MinGW-W64/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe"
    },
    {
      "type": "cppbuild",
      "label": "TDM-GCC 32位编译器生成32位应用程序",
      "command": "D:/TDM-GCC/TDM-GCC-32/bin/g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}_tdm.exe",
        "-s",
        "-I${config:wxWidgets_tdmgcc.include_path}",
        "-I${config:wxWidgets_tdmgcc.setup_path}",
        "-mwindows",
        "-L${config:wxWidgets_tdmgcc.lib_path}",
        "-lwxbase32u",
        "-lwxmsw32u_core"
      ],
      "options": {
        "cwd": "D:/TDM-GCC/TDM-GCC-32/bin/"
      },
      "problemMatcher": ["$gcc"],
      "group": "build",
      "detail": "编译器: D:/TDM-GCC/TDM-GCC-32/bin/g++.exe"
    },
    {
      "type": "cppbuild",
      "label": "TDM-GCC 64位编译器生成64位应用程序",
      "command": "D:/TDM-GCC/TDM-GCC-64/bin/g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}_tdm_x64.exe",
        "-s",
        "-I${config:wxWidgets_tdmgcc_x64.include_path}",
        "-I${config:wxWidgets_tdmgcc_x64.setup_path}",
        "-mwindows",
        "-L${config:wxWidgets_tdmgcc_x64.lib_path}",
        "-lwxbase32u",
        "-lwxmsw32u_core"
      ],
      "options": {
        "cwd": "D:/TDM-GCC/TDM-GCC-64/bin"
      },
      "problemMatcher": ["$gcc"],
      "group": "build",
      "detail": "编译器: D:/TDM-GCC/TDM-GCC-64/bin/g++.exe"
    },
    {
      "type": "cppbuild",
      "label": "TDM-GCC 64位编译器生成32位应用程序",
      "command": "D:/TDM-GCC/TDM-GCC-64/bin/g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}_tdm_x64_32.exe",
        "-m32",
        "-s",
        "-I${config:wxWidgets_tdmgcc.include_path}",
        "-I${config:wxWidgets_tdmgcc.setup_path}",
        "-mwindows",
        "-L${config:wxWidgets_tdmgcc.lib_path}",
        "-lwxbase32u",
        "-lwxmsw32u_core"
      ],
      "options": {
        "cwd": "D:/TDM-GCC/TDM-GCC-64/bin"
      },
      "problemMatcher": ["$gcc"],
      "group": "build",
      "detail": "编译器: D:/TDM-GCC/TDM-GCC-64/bin/g++.exe"
    }
  ]
}

共添加了 6 个编译任务,分别对应 2 种编译器,每种编译器对应的生成 3 个可以行文件

  • 带 x64 的表示 64 位应用程序
  • 带 x64_32 表示由 64 位编译器生成的 32 位程序
  • 带 tdm 的表示由 TDM-GCC 编译生成

VsCode 打开 HelloWorld.cpp 时按 F1 输入run task选择对应的任务生成对应的应用程序

生成的应用程序对比

在这里插入图片描述

  1. tdm-gcc 生成的应用程序比 MinGW-w64 生成的应用程序略大
  2. MinGW-w64 比 tdm-gcc 生成的应用程序 多依赖 libgcc_s_sjlj-1.dlllibstdc++-6.dll 仅对比 32 位程序
  3. tdm-gcc 可以用 64 位编译器加 -m32 参数和回 wxWidgets 32位库文件 生成32位应用程序,
    但因为wxWidgets gcc810库文件32位和64位使用了不同的异常处理,x86_64-8.1.0-release-win32-seh-rt_v6-rev0是不能通过添加-m32参数来生成32位应用的,
    可以使用x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0 添加 -m32参数和32位库文件来生成32位应用程序

个人觉得使用TDM-GCC省事些,而且可以只下载64位的TDM-GCC编译器来生成32位或64位的程序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion 模型分享:Indigo Furry mix(人类与野兽的混合)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

再添数十种回归模型!最全机器学习预测全家桶,MATLAB代码,这次千万别再错过了!

截止到本期&#xff0c;一共发了14篇关于机器学习预测全家桶MATLAB代码的文章。算上这一篇&#xff0c;一共15篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f;http://mp.weixin.qq.com/s?__bizMzkyNDUwMjc3Mg&m…

UIKit 在 UICollectionView 中拖放交换 Cell 视图的极简实现

概览 UIKit 中的 UICollectionView 视图是我们显示多列集合数据的不二选择&#xff0c;而丰富多彩的交互操作更是我们选择 UICollectionView 视图的另一个重要原因。 如上图所示&#xff1a;我们实现了在 UICollectionView 中拖放交换任意两个 Cell 子视图的功能&#xff0c;这…

JAVAEE初阶 网络编程(十二)

HTTP协议 一. 状态码1.200 OK2. 404 NOT FOUND3.403 forbidden4. 405 Method Not Allowed5. 500 Interval Server Error6.504 Gateway Timeout7.302 Move temporarily 二. 如何构造HTTP请求1.通过第三方工具构造. 二.HTTPS三. 密码学中的重要概念1.明文2.密文3.密钥4.对称加密5…

SpringBoot+MybatisPlus+Mysql实现批量插入万级数据多种方式与耗时对比

场景 若依前后端分离版本地搭建开发环境并运行项目的教程&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 若依前后端分离版如何集成的mybatis以及修改集成mybatisplus实现Mybatis增强&#xff1a; https://blog.csdn.net…

“TypeError: utils request jS WEBPACK IMPORTED MODULE O .default is undefined‘报错

写项目时报下列错误&#xff0c;找了半天&#xff0c;结果才发现自己在request.js中少写了一行代码 一定不要少些代码 export default requestrequest.js完整代码 import axios from axios;//创建一个新的axios对象 const request axios.create({baseURL:http://localhost:…

《springcloud alibaba》 一 Openfeign

准备 创建三个项目 父项目pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

[WebDav] WebDav基础知识

文章目录 什么是WebDavWebDav常用命令WebDav常用命令的测试&#xff08;代码&#xff09;PROPFIND 方法测试PUT 方法测试GET 方法测试PROPPATCH方法 WebDav缓存Cache-ControlEtag测试 强制重新验证不需要缓存 WebDav的锁WebDav的状态码WebDav身份验证WebDav版本控制WebDav和FTP…

mplfinance 使用make_addplot做复杂股票走势图

mplfinance 使用make_addplot做复杂股票走势图 1.代码 import talib as tb import pandas as pd import mplfinance as mpfimport matplotlib.pyplot as pltplt.rcParams[font.sans-serif][simHei] # 以黑体显示中文 plt.rcParams[axes.unicode_minus]False # 解决保存图像符…

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…

基于CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN&#xff08;卷积神经网络&#xff09;部分 4.2 GRU&#xff08;门控循环单元&#xff09;部分 4.3 Attention机制部分 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版…

STM32基于寄存器编程

在51中让一个引脚输出高低电平只需要一个步骤&#xff0c;而在32中至少需要三个步骤。 开启对应GPIO的时钟配置对应IO口设置IO口 本文将一步步进阶的讲解&#xff0c;三种寄存器编程的方法。 使用地址赋值进行配置使用ST的宏进行配置只控制需要的位&#xff08;位运算&#…

无/自监督去噪(2)——Noise2Noise (N2N) 理论分析(从损失函数入手)

目录 读前须知1. 前置知识——L1和L2 loss的特性2. additive Gaussian noise (spatial independent noise), L 2 L_2 L2​首杀3. brown Gaussian noise (spatial dependent noise), L 2 L_2 L2​双杀4. blind text removal, L 2 L_2 L2​导致结果偏灰, L 1 L_1 L1​前来破局…

刚开的抖店怎样推广?找主播带货,积累资源/渠道,拉动自然流量成交

我是王路飞。 2024年&#xff0c;依旧有很多人想入局抖音小店。 刚复工没几天&#xff0c;我就已经收到好多粉丝朋友的私信了&#xff0c;纷纷表示自己已经开通了抖店了&#xff0c;但是不会运营&#xff0c;现在新店应该怎样进行推广呢&#xff1f; 这篇内容就给你们详细说…

交换瓶子【第七届】【省赛】【A组】

题目描述 有N个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起2个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#xff0c;显然&#…

stm32——hal库学习笔记(DAC)

这里写目录标题 一、DAC简介&#xff08;了解&#xff09;1.1&#xff0c;什么是DAC&#xff1f;1.2&#xff0c;DAC的特性参数1.3&#xff0c;STM32各系列DAC的主要特性 二、DAC工作原理&#xff08;掌握&#xff09;2.1&#xff0c;DAC框图简介&#xff08;F1&#xff09;2.2…

用结构减法比较平面上4点结构的顺序

( A, B )---6*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有6个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;A有4个点&#xff0c;B全是0.收敛误差7e-4&#xff0c;收敛199次&#xff0c;统计迭代次数平均值并排序。 如果行和列自由变换&#xff0c;迭代次数不…

英伟达推出免训练,可生成连贯图片的文生图模型

目前&#xff0c;多数文生图模型皆使用的是随机采样模式&#xff0c;使得每次生成的图像效果皆不同&#xff0c;在生成连贯的图像方面非常差。 例如&#xff0c;想通过AI生成一套图像连环画&#xff0c;即便使用同类的提示词也很难实现。虽然DALLE 3和Midjourney可以对图像实现…

【UI自动化】使用poco框架进行元素唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

门控时钟基础知识

什么是门控时钟 RTL中的门控时钟 通常情况下&#xff0c;时钟树由大量的缓冲器和反相器组成&#xff0c;时钟信号为设计中翻转率最高的信号&#xff0c;时钟树的功耗可能高达整个设计功耗40%。 加入门控时钟电路后&#xff0c;由于减少了时钟树的翻转&#xff0c;节省了翻转功…