Wine编译环境搭建及使用完整流程详细笔记

news2024/9/20 16:44:32

Wine编译环境搭建及使用完整流程详细笔记

  • 1. 背景及资源文件下载
      • 1.1 背景说明(实现目标)
      • 1.2 VMWare下载地址:
      • 1.3 Debian安装文件地址
      • 1.34 Ubuntu安装文件地址
      • 1.5 Wine源码下载地址
        • 1.5.1 Web下载地址
        • 1.5.2 Git下载地址
  • 2. 常用文档
      • 2.1 Wine Document
      • 2.2 Build Wine Document
  • 3. 清华源配置Apt 包镜像库
  • 4. 安装必要资源包
  • 5. 用debootstrap做环境隔离(可选)
  • 6. 安装docker做环境隔离(可选)
    • 6.1 卸载旧版docker
    • 6.2 允许apt使用https
    • 6.3 下载Docker官方GPG密钥
    • 6.4 添加安装源
      • 6.4.1 先确认系统版本信息
      • 6.4.2 确认处理器和软件的架构信息
      • 6.4.3 编辑apt配置源的文件
    • 6.5 用apt安装docker
    • 6.6 docker下安装debian10系统
    • 6.7 docker下载过慢或卡住问题解决
      • 6.7.1 新建一个docker目录:
      • 6.7.2 添加配置文件到docker目录
      • 6.7.3 将镜像和docker重启
    • 6.8 启动docker下的容器debian
    • 6.9 带界面的docker容器
    • 6.10 容器与宿主机文件传输
    • 6.11 docker使用必备需知
      • 6.11.1 查看已创建的容器列表
      • 6.11.2 启动一个已存在容器
      • 6.11.3 进入一个已启动的容器
      • 6.11.4 删除一个已创建的容器
  • 7. 磁盘空间扩展
  • 8. 编译wine源码(32和64位兼容)
    • 8.1 添加32位架构的支持
    • 8.2 安装编译所需的依赖包
    • 8.3 获取wine编译为WoW64
      • 8.3.1 编译64位wine
      • 8.3.2 编译32位wine
  • 9. 使用编译好的wine
    • 9.1 在容器系统中安装wine
    • 9.2 在容器系统中运行winecfg
    • 9.2 在容器系统中运行winetricks(可选)
    • 9.3 通过wine运行一个exe应用程序

1. 背景及资源文件下载

1.1 背景说明(实现目标)

本教程记录的是基于i7CPU的MacBookPro电脑、为了不影响mac系统环境、安装Vmware虚拟机、Vmware上安装的是debian12的系统、基于debian12系统安装了docker、docker容器安装debian10、基于debian10配置编译环境进行编译和测试、可跳跃查看。

1.2 VMWare下载地址:

Linux/Windows:https://www.vmware.com/products/workstation-pro.html
MacOS:https://www.vmware.com/products/fusion.html

1.3 Debian安装文件地址

选择安装64位的系统
https:/www.debian.org/download

1.34 Ubuntu安装文件地址

https://cn.ubuntu.com/download/desktop
如果是Mac M1 M2芯片可以用Ubuntu

1.5 Wine源码下载地址

1.5.1 Web下载地址

https://www.winehq.org/

1.5.2 Git下载地址

https://gitlab.winehq.org/wine/wine

2. 常用文档

2.1 Wine Document

https://www.winehq.org/documentation

2.2 Build Wine Document

https://wiki.winehq.org/Building_Wine#Satisfying_Build_Dependencies

3. 清华源配置Apt 包镜像库

debian和ubuntu的地址:
https://mirrors.tuna.tsinghua.edu.cn/help/debian/
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
在这里插入图片描述
将下面文件备份后, 上边的deb全部copy到该文件中

sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
vi sources.list
sudo cp ./sources.list /etc/apt/sources.list

更新apt镜像列表

sudo apt-get update
sudo apt-get upgrade

4. 安装必要资源包

为了使用vmware共享剪切板,先将这两个安装后重启虚拟机

sudo apt install open-vm-tools
sudo apt install open-vm-tools-desktop

5. 用debootstrap做环境隔离(可选)

debootstrap是一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多
安装debootstrap

sudo apt-get install debootstrap
sudo debootstrap --arch amd64 bullseye ~/arch/debian https://mirrors.tuna.tsinghua.edu.cn/debian/
sudo debootstrap --variant=buildd --arch amd64 bullseye ~/arch/debian https://mirrors.tuna.tsinghua.edu.cn/debian/

安装成功后,进入目录切换环境

cd arche/debian
sudo chroot .

有时中文会有问题、以英文环境运行某些命令

sudo env LANGUAGE=en

6. 安装docker做环境隔离(可选)

6.1 卸载旧版docker

不确定是否已经安装过,必须先尝试卸载旧版

sudo apt-get remove docker docker-engine docker.io containerd runc

6.2 允许apt使用https

apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

6.3 下载Docker官方GPG密钥

先安装curl再用curl下载

sudo apt-get install curl
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

6.4 添加安装源

6.4.1 先确认系统版本信息

cat /etc/os-release 

可以看到code name:bullseye

PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"

也可以通过lsb-release -a命令来查看
在这里插入图片描述

6.4.2 确认处理器和软件的架构信息

uname -a

如果下列i686或者i386, 就说明是32位系统,下边的步骤不用看了,你可以考虑用vmware,选择64位架构重新安装系统,也可以找其它的32位安装的方式、如果是Mac M1/M2的芯片、需要安装Arm版本、本文不做介绍;

Linux debian 5.10.0-23-686-pae #1 SMP Debian 5.10.179-1 (2023-05-12) i686 GNU/Linux

如果是x86_64(amd64)的系统,恭喜你,一切安装流程将更加顺利
在这里插入图片描述

6.4.3 编辑apt配置源的文件

编辑sudo vi /etc/apt/sources.list文件,最后一行添加阿里云的镜像,其中的arch是cpu架构,sign-by是6.3节下载的密钥路径

deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib non-free

deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian/ bullseye stable

添加完成后,执行更新命令

sudo apt-get update

显示结果如下:

获取:1 https://mirrors.tuna.tsinghua.edu.cn/debian bookworm InRelease [147 kB]
获取:2 https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates InRelease [52.1 kB]
获取:3 https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-backports InRelease [49.7 kB]
获取:4 https://mirrors.tuna.tsinghua.edu.cn/debian bookworm/main amd64 Packages [8,904 kB]                    
命中:5 https://security.debian.org/debian-security bookworm-security InRelease    

6.5 用apt安装docker

apt install docker-ce docker-ce-cli containerd.io

6.6 docker下安装debian10系统

搜索docker下的debian镜像

sudo docker search debian

在这里插入图片描述

下载debian10的镜像文件

sudo docker pull debian:10

在这里插入图片描述

6.7 docker下载过慢或卡住问题解决

docker下安装debian10系统如果在国内可能会出现下载过慢或卡住不动的情况,这时我们可以替换阿里的镜像

6.7.1 新建一个docker目录:

sudo mkdir -p /etc/docker

6.7.2 添加配置文件到docker目录

在这个目录里daemon.json文件配置一个阿里云的镜像加速地址:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mjpmak3l.mirror.aliyuncs.com"]
}
EOF

6.7.3 将镜像和docker重启

sudo systemctl daemon-reload
sudo systemctl restart docker

重启后可以用docker pull尝试再次下载, 就可以成功了

6.8 启动docker下的容器debian

启动镜像文件debian:10,会得到容器编号

sudo docker run -itd debian:10 /bin/bash

查看debian10在容器中的情况

sudo docker ps

使用attach命令进入容器(也可以使用ssh、nsenter、exec)

sudo docker attach ada5094c89419e344b727d7d053fc9bd384a10265b0fc0e12008ed25281dc368

下边是运行效果截图、可以看到我们进入容器后系统的版本信息
在这里插入图片描述
退出容器可以用 exit 命令

但是这样做并不是我们想要的,因为当电脑重启后,容器中的配置和内容会全部丢失,因些我们需要创建与宿主机关系的卷,来达到宿主机重启后保留容器内的数据和配置
首先我在宿主机创建了docker_debian10,在容器debian10中创建了project目录,用如下方式启动使之关联:

docker run -itd -v /home/xuanwenchao/docker_debian10:/project debian:10 /bin/bash

然后再次进入容器中的debian10系统
在这里插入图片描述

6.9 带界面的docker容器

docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/xuanwenchao/docker_debian10:/project debian:10 /bin/bash

解释说明:

-it:以交互式模式运行容器并分配一个终端。
–rm:容器退出后自动删除容器。(这里不添加这个参数)
-e DISPLAY=$DISPLAY:将宿主机的 DISPLAY 环境变量传递给容器,用于 X11 转发。
-v /tmp/.X11-unix:/tmp/.X11-unix:将宿主机的 X11 服务器套接字目录映射到容器内的相同路径,以便容器可以显示图形界面。
-v /home/xuanwenchao/docker_debian10:/project:将宿主机的 /home/xuanwenchao/docker_debian10 目录映射到容器内的 /project 目录,以便容器可以访问该目录下的文件。
debian:10:使用 debian:10 镜像。
/bin/bash:在容器内执行 Bash 终端。

为容器安装必要的X11服务器工具包

apt update
apt install -y xauth x11-apps
apt install -y x11-xserver-utils
export DISPLAY=:0
xhost +local:root

解释说明:

xauth 是 X Window System 的授权机制,用于控制 X 服务器和客户端之间的身份验证和授权。它通过生成和管理授权数据来确保安全访问 X 服务器。

x11-apps 是一个包含多个 X11 应用程序的软件包。这些应用程序提供了一些基本的图形界面工具和实用程序,如终端模拟器、时钟、绘图工具等,用于在 X Window System 环境中进行交互和操作。

安装 xauth 和 x11-apps 可以提供必要的工具和支持,使得在 X Window System 下的图形界面环境中能够正常运行和交互。这些工具对于需要使用图形界面的应用程序或执行一些与 X11 相关的操作非常有用。

xhost +local:root 是一个 X Window System 的命令,用于允许本地 root 用户通过 X 协议访问 X 服务器。通过执行这个命令,X 服务器会将本地 root 用户添加到访问控制列表(Access Control List,简称 ACL),从而允许其连接和显示图形界面。

安装成功后,在容器内执行如下命令、可以测试一下

xeyes

看到如下效果就是成功了
在这里插入图片描述

6.10 容器与宿主机文件传输

为容器debian10制作新的sources.list文件,并将文件copy到容器的debian系统中

sudo docker cp ./sources.list ada5094c89419e344b727d7d053fc9bd384a10265b0fc0e12008ed25281dc368:/etc/apt/sources.list

结果显示如下

Successfully copied 2.56kB to ada5094c89419e344b727d7d053fc9bd384a10265b0fc0e12008ed25281dc368:/etc/apt/sources.list

6.11 docker使用必备需知

docker容器第一次启动成功后,这个容器就创建好了,不需要每次重新创建一个新的容器

6.11.1 查看已创建的容器列表

docker ps -a

在这里插入图片描述

6.11.2 启动一个已存在容器

docker start <CONTAINER_ID>

6.11.3 进入一个已启动的容器

sudo docker attach <CONTAINER_ID>

6.11.4 删除一个已创建的容器

sudo docker rm <CONTAINER_ID>

7. 磁盘空间扩展

在编译之前一定要提前确认是否有足够的磁盘空间, 如果可用空间少于5G最好提前做好扩展,虚拟机默认分配20G,如果编译过程中发现空间不足很尴尬,会导致系统启动出错、就像下图这样:

在这里插入图片描述

如果想要不丢失数据扩展vmware/debian12的磁盘空间,首先要在vmware中操作,我将原来的20G扩大到35G
在这里插入图片描述
但是扩展之后,启动debian12系统、你依然可以看到可用空间没有变化
使用sudo fdisk -l 命令查看当前状态

sudo fdisk -l

可以看到空间没有变化、有一行红色的提示语、意思是说: GPT(GUID 分区表)中的 PMBR(Protective MBR)大小不匹配。PMBR 是用来保护 GPT 的主引导记录(Master Boot Record),以防止意外修改或破坏分区表,说白了,就是后来增加的空间没有被用上。
在这里插入图片描述
输入sudo fdisk

sudo fdisk

进入fdisk的命令行模式,输入m显示帮助菜单
在这里插入图片描述
输入p查看当前的分区表、当前有三个分区sda1、sda2、sda3
在这里插入图片描述
为了不影响现有系统中的数据、只能创建一个新的分区、输入n ,前边有三个分区、新的分区编号用4、然后需要告诉起动和结束的sector位置、如果想全部空间都用上就直接回车就可以了、创建完成后再次输入p 可以看到分区有四个了、输入w保存分区退出。
在这里插入图片描述
接下来对新创建的分区进行格式化
在这里插入图片描述
接下来走一波操作就可以成功了;

在设备 /dev/sda4 上创建物理卷(Physical Volume)。

sudo pvcreate /dev/sda4 

将 /dev/sda4 分区添加到逻辑卷组 debian-vg 中:

sudo vgextend debian-vg /dev/sda4

扩展 debian-vg 卷组中的逻辑卷 root,以利用新添加的分区空间:

sudo lvextend -r -l +100%FREE /dev/debian-vg/root

下边的运行的效果图
在这里插入图片描述
再次查看可用空间、可以看到扩展成功了
在这里插入图片描述

8. 编译wine源码(32和64位兼容)

8.1 添加32位架构的支持

因为当前是64位系统、首先添加对32位架构的支持,注意如果容器中只有一个root用户,不用添加sudo

sudo dpkg --add-architecture i386
sudo apt update

运行效果如下:
在这里插入图片描述

8.2 安装编译所需的依赖包

按官方文档给出的信息:https://wiki.winehq.org/Building_Wine
在这里插入图片描述
在这里插入图片描述
执行批量安装命令

sudo apt install flex bison gcc make gcc-mingw-w64 libasound2-dev libpulse-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev libgnutls28-dev libjpeg62-turbo-dev libpng-dev libtiff-dev libunwind-dev libx11-dev libxml2-dev libxslt1-dev libfaudio-dev libgstreamer1.0-dev libmpg123-dev libosmesa6-dev libudev-dev libvkd3d-dev libvulkan-dev libcapi20-dev liblcms2-dev libcups2-dev libgphoto2-dev libsane-dev libgsm1-dev libkrb5-dev libldap2-dev ocl-icd-opencl-dev libpcap-dev libusb-1.0-0-dev libv4l-dev libopenal-dev libjxr-dev libasound2-dev:i386 libpulse-dev:i386 libdbus-1-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libgnutls28-dev:i386 libjpeg62-turbo-dev:i386 libpng-dev:i386 libtiff-dev:i386 libunwind-dev:i386 libx11-dev:i386 libxml2-dev:i386 libxslt1-dev:i386 libfaudio-dev:i386 libgstreamer1.0-dev:i386 libgstreamer-plugins-base1.0-dev:i386 libmpg123-dev:i386 libosmesa6-dev:i386 libsdl2-dev:i386 libudev-dev:i386 libvkd3d-dev:i386 libvulkan-dev:i386 libcapi20-dev:i386 liblcms2-dev:i386 libcups2-dev:i386 libgphoto2-dev:i386 libsane-dev:i386 libgsm1-dev:i386 libkrb5-dev:i386 libldap2-dev:i386 ocl-icd-opencl-dev:i386 libpcap-dev:i386 libusb-1.0-0-dev:i386 libv4l-dev:i386 libopenal-dev:i386 libjxr-dev:i386

然后就等待安装完成
在这里插入图片描述

8.3 获取wine编译为WoW64

WoW64(Windows 32-bit on Windows 64-bit)是一种Windows操作系统的子系统,它允许在64位版本的Windows操作系统上运行32位的应用程序和系统组件。它为兼容性目的而设计,以确保32位的应用程序能够在64位的Windows操作系统上正常运行。

创建两个新的目录,分别是win32和win64,安装git获取代码,将wine完整的代码分别copy一份到新目录中

apt install git
git clone https://gitlab.winehq.org/wine/wine
mkdir win64
mkdir win32
cp -a ./wine ./win64
cp -a ./wine ./win32

8.3.1 编译64位wine

因为64位所需的依赖包与32位是不一样的,因此每次编译不同架构版本之前,需要重新安装依赖包
同时将不需要依赖包删除掉

cd win64/wine
apt install libgstreamer-plugins-base1.0-dev libsdl2-dev
apt autoremove

执行configure查看结果是否有错误

./configure --enable-win64

在这里插入图片描述
如果执行configure没有错误、就可以make了,为了提高编译速度,编译前可以使用lscp命令确认CPU的核心数量

lscpu

在这里插入图片描述
如果Cpu(s)显示数量为1则说明只有一个内核,如果硬件是多核的,这个值可以用vmware来自行分配

在这里插入图片描述

如果是多核可以使用 make -jN 命令提高编译速度

make -j2

在这里插入图片描述

8.3.2 编译32位wine

查询本机架构:

dpkg --print-architecture
amd64

打开本机多架构支持:

dpkg --print-foreign-architectures
i386

添加i386架构并更新:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get upgrade
apt-get install gcc-multilib g++-multilib

因为64位所需的依赖包与32位是不一样的,因此每次编译不同架构版本之前,需要重新安装依赖包
同时将不需要依赖包删除掉

cd ../../win32/wine
apt install libgstreamer-plugins-base1.0-dev:i386 libsdl2-dev:i386
apt autoremove 

编译32位版本wine时通过–with-wine64参数,指定了已编译完成的wine64位的目录,这样编译32位wine时,程序会注入64位版本处理32位程序所需的库, 如果不需要64位的,就不加任何参数就可以,执行configure查看结果是否有错误

./configure --with-wine64=/project/win64/wine

在这里插入图片描述
执行make编译32位wine,需要一点时间…

make -j2

在这里插入图片描述

9. 使用编译好的wine

9.1 在容器系统中安装wine

在win32/wine目录下执行安装命令、再到win64/wine下执行安装命令

make install
cd ../../win64/wine
make install

9.2 在容器系统中运行winecfg

安装完成后首选需要执行winecfg来配置环境

winecfg

配置会先在容器系统中安装Mono
在这里插入图片描述
Mono 是一个开源的实现了 Microsoft .NET Framework 的跨平台框架。在 Wine 中,可以使用 Mono 来运行和支持基于 .NET 的应用程序。

执行 winecfg MONO 命令会打开一个专门用于配置 Mono 的窗口。

如果未检测到wine-gecko还会继续安装,容器中已经包含了,所以不需要安装了,

安装界面关闭重新回到命令行状态,再次输入winecfg 会出现Wine configuration配置界面。
在这里插入图片描述
配置Windows版本:在 “Applications” 选项卡中,选择合适的Windows版本,以匹配你要运行的应用程序的要求。

配置图形选项:在 “Graphics” 选项卡中,根据你的系统和需求,调整图形设置。你可以选择启用或禁用桌面集成、允许窗口管理器控制窗口和启用虚拟桌面等选项。

配置音频选项:在 “Audio” 选项卡中,选择合适的音频驱动程序,以确保应用程序在 Wine 环境中正确地播放声音。

配置库文件:在 “Libraries” 选项卡中,你可以添加或修改特定的库文件设置,以解决应用程序在 Wine 中的依赖关系或兼容性问题。例如,你可以添加某些 DLL 文件来模拟 Windows 环境中缺失的库。

配置外观和行为:在 “Desktop Integration” 和 “Staging” 选项卡中,你可以根据个人偏好进行设置,以改变 Wine 窗口的外观、行为和性能。

也可以先用默认的什么都不配置。

9.2 在容器系统中运行winetricks(可选)

首先通过apt安装winetricks然后再运行

apt-get install winetricks
winetricks

在这里插入图片描述
在这里插入图片描述

Winetricks并不是必须执行的步骤,但它是一个非常有用的工具,可以帮助你安装和配置一些常见的 Windows 组件、运行库和其他必要的依赖项,以提高在 Wine 环境下运行 Windows 程序的兼容性和性能。

使用 Winetricks,你可以轻松地安装和配置诸如 DirectX、.NET Framework、Visual C++ 运行库等常见的 Windows 组件。这些组件对于许多 Windows 程序的正确运行是必要的。

有明确目标需要时、可以通过winetricks来尝试解决。

9.3 通过wine运行一个exe应用程序

我下载了一个Notepad++的exe应用程序,我们先尝试一下运行:

root@e47effab5c82:/project# wine Notepad++_12_10031411.exe 

可以看到如下错误信息:

008c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
008c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
008c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
008c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
0024:err:winediag:ntlm_check_version ntlm_auth was not found. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
0024:err:ntlm:ntlm_LsaApInitializePackage no NTLM support, expect problems
0110:fixme:ver:GetCurrentPackageId (0350FEF0 00000000): stub
0024:fixme:richedit:editor_handle_message EM_SETLANGOPTIONS: stub
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  130 (MIT-SHM)
  Minor opcode of failed request:  3 (X_ShmPutImage)
  Value in failed request:  0x2de
  Serial number of failed request:  276
  Current serial number in output stream:  284

因为缺少NTLM的支持、所以无法启动
Debian 系统中,你可以运行以下命令安装 winbind 软件包,该软件包通常提供了 ntlm_auth 工具:

apt install winbind

安装成功后再次尝试启动exe

wine Notepad++_12_10031411.exe 

可以看到安装向导界面已经出现了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
exe应用程序已经成功启动了。

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

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

相关文章

透彻理解 UART 通信的基本方法

UART是一种异步全双工串行通信协议&#xff0c;由 Tx 和 Rx 两根数据线组成&#xff0c;因为没有参考时钟信号&#xff0c;所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数&#xff0c;从而按照相同的速率进行通信。 异步通信以一个字符为传输单位…

simulink m脚本加载

手动 在matlab下执行 run(UntitledConfig.m) 然后在similink下再重新编译一次 自动 [Matlab]Simulink预先加载m文件_simulink加载m文件_祥知道的博客-CSDN博客

MachineLearningWu_9_overfitting

x.1 过拟合问题 在开始前&#xff0c;让我们先理解一下模型拟合过程中经常出现的三种情况&#xff0c;underfit&#xff0c; just right&#xff0c; overfit/high variance&#xff0c;underfit是指没有足够的特征来拟合现有数据或者iterations训练轮次过少&#xff0c;而ove…

ASO优化之应用评论的重要性

应用的评级在吸引新用户使用我们应用程序方面发挥着非常关键的作用。许多用户会通过阅读应用的评分和评论来观察我们应用的独特性和功能。更多正面评价和5星级评级&#xff0c;能够给我们应用的访问者提高下载应用的积极性&#xff0c;同时也会增加信任感。 如果我们的应用的…

cloudstack使用nginx部署ui

一、源码打包 #在ui目录下 #安装依赖 npm install #启动项目 npm run serve 将打包后的文件复制到nginx的文件区域&#xff0c;示例使用/usr/local/code/front/ui/文件夹 二、配置nginx # For more information on configuration, see: # * Official English Documentation…

Vue3中父子组件实现数据双向绑定效果

父组件&#xff1a; <template><div class"user"><hy-form v-model"formData" /></div> </template><script lang"ts"> import { defineComponent, ref } from vue import HyForm from /base-ui/formexpor…

基于Hololen2 unity vuforia空间生成大型物体,以及打开内部浏览器的打开教程

1.简介 1.1 功能介绍 本文主要做了两个功能&#xff1a; 1.扫描一张二维码生成一个操作台&#xff08;桌子&#xff09;&#xff0c;这张桌子比二维码尺寸大非常多&#xff08;就是实际物体大小的桌子&#xff09;&#xff0c;所以需要定位 好桌子和操作台之间的位置关系。并且…

【计算机组成与体系结构Ⅰ】课后作业汇总

目录 1-1 1-2 2-1 3-1 3-2 4-1 4-2 5-1 6-1 6-2 7-1 7-2 1-1 作业1. 袁春风《计算机组成与系统结构》第2版或者第3版&#xff1a;第1章 习题 2&#xff08;1&#xff09;-&#xff08;3&#xff09; 冯诺依曼计算机由哪几部分组成&#xff1f;各部分的功能是什么&…

java.sql.SQLException: connection holder is null

一、工作中遇到的问题汇总 1、java.sql.SQLException: connection holder is null&#xff1b; 问题描述&#xff1a;对于大表进行查询、修改操作时&#xff0c;有时sql需要执行很长时间&#xff0c;这时就可能在执行到半路时、报错SQLException: connection holder is null。…

时间序列分析波动性预测GARCH模型

GARCH&#xff08;Generalized Autoregressive Conditional Heteroskedasticity&#xff09;模型是一种常用于预测金融时间序列波动性的统计模型。它是ARCH&#xff08;Autoregressive Conditional Heteroskedasticity&#xff09;模型的扩展&#xff0c;通过引入对过去波动性的…

python怎么获取免费代理IP

什么是免费代理IP 免费代理IP是指可以免费使用的代理服务器的IP地址。代理服务器充当客户端和目标服务器之间的中间人&#xff0c;通过转发请求和响应来实现网络数据的传输。使用代理IP可以隐藏真实的客户端IP地址&#xff0c;实现匿名访问网络资源。 免费代理IP通常由个人或组…

【Java】自定义对象作为HashMap的键,同时重写hashCode和equals方法

如果要将自定义类的实例 作为HashMap的 键&#xff0c;必须重写hashCode和equals方法 简单版本&#xff0c;看不懂看后面复杂版本解释 复杂版本解释 当我们用 HashMap存入自定义的类时&#xff0c;如果不重写这个自定义类的equals和hashCode方法&#xff0c;得到的结果会和我们…

3.精通RabbitMQ—基础 RabbitMQ知识、进阶 RabbitMQ知识

本文目录如下&#xff1a; 什么是 RabbitMQ?什么是 消息中间件?RabbitMQ 的应用场景&#xff1f;RabbitMQ 中主要包含哪几个部分&#xff1f; 精通 RabbitMQ&#xff0c;从认识开始 什么是 RabbitMQ? RabbitMQ 整体上是一个 生产者与消费者模型&#xff0c;主要负责 接收、…

Redis的一个大Key

什么是 redis 的大 key? redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值&#xff0c;而是该 key 所对应的 value 过大对于 string 类型来说&#xff0c;一般情况下超过 10KB 则认为是大 key&#xff1b;对于set、zset、hash 等类型来说&#xff0c;一…

无线通信模块接口类型_USB/SDIO/UART接口wifi模块特性

无线通信模块接口,简单来说设备需要与外部设备交换数据的通讯接口,如工程师常提到的USB接口,UART接口,SDIO接口,I2S接口,I2C接口,WAN口,LAN口,SPI接口,以太网接口(RJ-45接口)等。 原文链接:http://www.skylab.com.cn/newsview-2768.html 1、USB接口 USB接口是平…

Git gui教程---第六篇 Git gui的使用 变动,提交

变动&#xff0c;提交 修改TEST.txt的内容&#xff0c;并且点击重新扫描&#xff0c;则TEST文件会出现在未缓存的窗口中 像前面教的一样&#xff0c;缓存后&#xff0c;添加描述后提交&#xff0c;并且打开历史记录可以查看到提交的变动。我这里会新增一个文件并且提交多几次&…

N天爆肝数据库——MySQL(2)

本篇文章&#xff0c;主要对DML DQL进行知识总结和学习。 期待和大家一起学习进步。DML-介绍 DML(数据库操作语言)&#xff0c;用来对数据库中表的数据 记录进行增删改操作。 添加数据&#xff08;INSERT&#xff09; 修改数据&#xff08;UPDATE&#xff09; 删除数据&#…

计算机毕业论文内容参考|基于Java的城乡低保信息管理系统的设计和实现

文章目录 导文摘要:前言:绪论:1课题背景:2国内外现状与趋势:3课题内容:相关技术与方法介绍:系统分析:系统设计:系统实现:系统测试:总结与展望:1本文总结:2后续工作展望:导文 这里是导文计算机毕业论文内容参考|基于Java的城乡低保信息管理系统的设计和实现 摘要:…

C++图形开发(10):移动的方块

文章目录 1.引入2.静止的方块3.移动的方块 1.引入 那么我们今天就来实现一下矩形的移动 注意&#xff1a;本篇文章的内容都是基于此前用空格控制的小球的基础上进行开发的&#xff0c;详见&#xff1a;C图形开发&#xff08;8&#xff09;&#xff1a;空格键控制小球起跳 先来…

PHP实现微信小程序推送消息至公众号

1、申请微信小程序和公众号必须是同一个主体 2、小程序和公众号必须要认证 3、公众号是服务号&#xff0c;接收消息必须关注公众号 4、公众号后台配置 开通模版服务 申请模版&#xff0c;获取模板消息的ID 关联小程序 获取公众号appid 5、小程序后台获取appid&#xff0c;a…