【ARM版银河麒麟安装windows应用程序】

news2025/1/12 1:00:47

文章目录

  • 前言
  • 一、简介
  • 2.1 Wine/Wine64
  • 2.2 Box86/Box64
  • 二、配置运行环境
    • 2.1 安装aarch64运行库
    • 2.2 安装armhf运行库
      • 2.2.1 添加32位armhf架构支持
      • 2.2.2 检查运行库依赖
      • 2.2.3 解决依赖冲突
      • 2.2.4安装运行库
  • 三、安装Box64
  • 四、安装Wine
  • 五、初始化wine配置
  • 总结


前言

银河麒麟是基于Linux发行版Ubuntu开发的自主可控操作系统,为我国信息基础建设提供了重要支撑。截至目前,银河麒麟V10的软件仓库已经提供了大量国产软件,但在特定情况下,我们可能还是希望使用一些Windows软件,本文介绍了如何在Arm版本银河麒麟V10上安装windows位软件,用于技术交流,以备不时之需,但希望读者继续支持国产软件,支持自主可控软件生态。

虽然麒麟软件商城提供了Crossover商业平台,可以安装部分Windows软件,但是其版本较低,软件兼容性有限,本文介绍的方法主要思路与Crossover类似,利用开源Box64+Wine64以及Box86+Wine分别实现Arm版银河麒麟安装64位和32位Windows软件,需要注意的是,该方案是在麒麟系统中实现了Windows的调用库,与基于Qemu的虚拟机完全不同,因此其运行性能远高于虚拟机。

这里只介绍box64+wine64的安装和配置方法,可以安装运行64位Windows软件,Box86+Wine的安装方法与其类似,不再赘述,如有问题可以留言。

除了本文给的方案,Wine还提供了开源项目Hangover,给出了基于Fex、Qemu和Box的异构平台方案,其中Box方案实质上是把Box64/Box86作为库文件集成到Wine,但不幸的是,本机测试无法运行,而Qemu虚拟机方案性能较差,Fex方案存在大量Bug。

本文测试环境为Arm版银河麒麟Kylin-Desktop-V10-SP1-General-Release-2303-ARM64,CPU为飞腾D2000。


警告:本安装过程可能替换系统运行库,操作不慎可能导致麒麟UKUI桌面无法运行,请备份系统后谨慎操作

一、简介

2.1 Wine/Wine64

官网介绍:Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,macOS 及 BSD 等)上运行 Windows 应用的兼容层。Wine 不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是將 Windows API 调用翻译成为动态的 POSIX 调用,免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。

简单地说,就是Wine在非Windows系统上,实现了底层的Windows的API,从而可以安装和运行Windows应用。但是,Wine并没有实现CPU架构的转换,也就是X86/X64架构的系统只能运行X86/X64架构的Windows应用,而Arm架构的系统只能运行Arm架构的Windows软件,因此我们需要Box86/Box64实现CPU架构的转换。

2.2 Box86/Box64

Github项目介绍:Box64 可以在非 x86_64 Linux 系统(比如 ARM64)上运行 x86_64 Linux 程序(比如游戏),注意主机系统需要是 64 位小端。由于 Box64 使用一些“系统”库的原生版本,如 libc、libm、SDL 和 OpenGL 等,因此很容易与大多数应用程序集成和使用,并且在许多情况下性能会相当不错。可以在这里查看一些性能测试的样例。

Box64 集成了适用于 ARM64 和 RV64 平台的 DynaRec(动态重编译器),速度可以比纯解释模式快 5 到 10 倍。可以在这里找到有关 DynaRec 工作原理的一些信息。

一些 x64 内部操作码使用 “Realmode X86 Emulator Library” 的部分内容,有关版权详细信息,请参见 License。

二、配置运行环境

2.1 安装aarch64运行库

直接执行以下命令进行安装:

sudo apt-get install libasound2:arm64 libc6:arm64 libglib2.0-0:arm64 libgstreamer-plugins-base1.0-0:arm64 libgstreamer1.0-0:arm64 libldap-2.4-2:arm64 libpcap0.8:arm64 libvkd3d1:arm64 libx11-6:arm64 libxext6:arm64 libasound2-plugins:arm64 ocl-icd-libopencl1:arm64 libncurses6:arm64 libncurses5:arm64 libcap2-bin:arm64 libdbus-1-3:arm64 libfontconfig1:arm64 libfreetype6:arm64 libglu1-mesa:arm64 libglu1:arm64 libgnutls30:arm64 libgssapi-krb5-2:arm64 libkrb5-3:arm64 libodbc1:arm64 libosmesa6:arm64 libsdl2-2.0-0:arm64 libv4l-0:arm64 libxcomposite1:arm64 libxcursor1:arm64 libxfixes3:arm64 libxi6:arm64 libxinerama1:arm64 libxrandr2:arm64 libxrender1:arm64 libxxf86vm1 libc6:arm64

本机测试未出现依赖冲突。

2.2 安装armhf运行库

2.2.1 添加32位armhf架构支持

输入以下命令添加armhf架构:

sudo dpkg --add-architecture armhf

输入以下命令更新apt缓存:

sudo apt update

2.2.2 检查运行库依赖

感谢博主GreatNXY的实测,将麒麟apt源更换为2403版本后,安装下列运行库不会出现依赖冲突,建议更换apt源后直接安装下列运行库。(2024.08.26更新)

输入以下命令查看运行库是否存在依赖冲突:

sudo apt-get install libasound2:armhf libc6:armhf libglib2.0-0:armhf libgstreamer-plugins-base1.0-0:armhf libgstreamer1.0-0:armhf libldap-2.4-2:armhf libpcap0.8:armhf libvkd3d1:armhf libx11-6:armhf libxext6:armhf libasound2-plugins:armhf ocl-icd-libopencl1:armhf libncurses6:armhf libncurses5:armhf libcap2-bin:armhf libdbus-1-3:armhf libfontconfig1:armhf libfreetype6:armhf libglu1-mesa:armhf libglu1:armhf libgnutls30:armhf libgssapi-krb5-2:armhf libkrb5-3:armhf libodbc1:armhf libosmesa6:armhf libsdl2-2.0-0:armhf libv4l-0:armhf libxcomposite1:armhf libxcursor1:armhf libxfixes3:armhf libxi6:armhf libxinerama1:armhf libxrandr2:armhf libxrender1:armhf libxxf86vm1 libc6:armhf

注意:这里没有列出libopenal1:armhf(用于跨平台声音输出)、libgphoto2-6:armhf、libgphoto2-port12:armhf、libsane1:armhf (用于图像扫描软件如扫描仪软件)、libudev1:armhf(与libSDL2库功能相同) libusb-1.0-0:armhf(USB直连,通常不需要)、libcups2(用于连接打印机),因为在本机测试可能会导致UKUI冲突,无法进入桌面,这些库不安装可能导致相关应用无法运行
如果没有错误提示,那么恭喜你,基本后续安装不会出现什么问题,但是大部分情况下,运行库可能出现依赖冲突,下一节,以本机实测的安装过程为例,介绍如何进行解决。

2.2.3 解决依赖冲突

本机实测在执行2.2.2节所述安装命令时,出现以下提示:

注意,选中 ‘libglu1-mesa:armhf’ 而非 ‘libglu1:armhf’
libxxf86vm1 已经是最新版 (1:1.1.4-1build1)。
libxxf86vm1 已设置为手动安装。
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
libfontconfig1:armhf : 依赖: libuuid1:armhf (>= 2.16) 但是它将不会被安装
libglib2.0-0:armhf : 依赖: libmount1:armhf (>= 2.28) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

提示很清楚, libfontconfig1:armhf和libglib2.0-0:armhf库存在依赖冲突。

对于libglib2.0-0:armhf,提示依赖: libmount1:armhf (>= 2.28) 但是它将不会被安装,输入以下命令看一下是哪个库导致libmount1:armhf无法安装:

sudo apt install libmount1:armhf

提示如下

下列软件包有未满足的依赖关系:
libmount1:armhf : 依赖: libblkid1:armhf (>= 2.17.2) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

输入以下命令查看libblkid1和libblkid1:armhf的版本:

apt policy libblkid1 libblkid1:armhf

提示如下:

libblkid1:
已安装:2.34-0.1kylin18k0.2
候选: 2.34-0.1kylin19k0.1
版本列表:
2.34-0.1kylin19k0.1 500
500 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-2303-updates/main arm64
500 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-2303-updates/universe ar
*** 2.34-0.1kylin18k0.2 100
100 /var/lib/dpkg/status
2.34-0.1kylin16~rc1 500
500 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1/main arm64 Packages
libblkid1:armhf:
已安装:(无)
候选: 2.34-0.1kylin18k0.2
版本列表:
2.34-0.1kylin18k0.2 500
500 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1-2303-updates/main armhf
2.34-0.1kylin16~rc1 500
500 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1/main armhf Packages

这里可以发现,libblkid1:armhf无法安装的可能原因是,apt包管理器默认安装最新版本,并且与libblkid1一致,但libblkid1的最新版本是2.34-0.1kylin19k0.1,本机并未安装,且libblkid1:armhf没有对应的2.34-0.1kylin19k0.1版本,从而导致安装失败。

由于libblkid1:armhf可用的版本为2.34-0.1kylin18k0.2,与libblkid1当前已安装版本一致,因此直接指定libblkid1:armhf版本号进行安装:

sudo apt install -y libblkid1:armhf=2.34-0.1kylin18k0.2

类似的,首先输入以下命令查看libmount1和libmount1:armhf版本信息:

apt policy libmount1 libmount1:armhf

提示与libblkid1和libblkid1:armhf的版本类似,这里不再赘述,直接输入以下命令安装libmount1:armhf

sudo apt install -y libmount1:armhf=2.34-0.1kylin18k0.2

最后直接安装libglib2.0-0:armhf

sudo apt install -y libglib2.0-0:armhf

对于libfontconfig1:armhf,采用与上述相同的方法安装指定版本,如果还有其它冲突,请参考本文进行解决。

本机测试时,发现libopenal1:armhf(音频支持库)、libdbus-1-3:armhf(简单的进程间消息系统)、libasound2-plugins:armhf(蓝牙音频支持库)等运行库需要更新麒麟SDK库libkysdk-config:armhf和libkysdk-utils:armhf,但是出现以下错误,强制安装则导致系统崩溃,暂时未找到解决方案,因此本机未安装这几个库,可能导致特定Windows软件无法运行。

dpkg: 处理归档 /var/cache/apt/archives/libkysdk-config_2.0.0.0-0k0.6_armhf.deb (–unpack)时出错:
尝试覆盖共享的 ‘/usr/lib/kysdk/kysdk-base/libkyconf.so.2.0.0’, 它与软件包 libkysdk-config:armhf 中的其他实例不同
准备解压 …/libkysdk-utils_2.0.0.0-0k0.6_armhf.deb …
正在解压 libkysdk-utils:armhf (2.0.0.0-0k0.6) …
dpkg: 处理归档 /var/cache/apt/archives/libkysdk-utils_2.0.0.0-0k0.6_armhf.deb (–unpack)时出错:
尝试覆盖共享的 ‘/usr/lib/kysdk/kysdk-base/libkydatastruct.so.2.0.0’, 它与软件包 libkysdk-utils:armhf 中的其他实例不同
在处理时有错误发生:
/var/cache/apt/archives/libkysdk-config_2.0.0.0-0k0.6_armhf.deb
/var/cache/apt/archives/libkysdk-utils_2.0.0.0-0k0.6_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Failed to install libopenal1:armhf version 1:1.19.1-1

2.2.4安装运行库

这里提供了一个安装脚本,会逐个安装麒麟官方源中提供的最高版本armhf运行库,使用sudo bash执行该脚本进行安装:
注意,如果某个运行库安装时,提示需要卸载UKUI相关运行库或重要的系统库,请选择N不要安装,否则将导致无法进入UKUI桌面或系统崩溃

#!/bin/bash  
  
# 定义要安装的armhf包列表  
armhf_packages=("libasound2:armhf" "libc6:armhf" "libglib2.0-0:armhf" "libgstreamer-plugins-base1.0-0:armhf" "libgstreamer1.0-0:armhf" "libldap-2.4-2:armhf" "libpcap0.8:armhf" "libvkd3d1:armhf" "libx11-6:armhf" "libxext6:armhf" "ocl-icd-libopencl1:armhf" "libncurses6:armhf" "libncurses5:armhf" "libcap2-bin:armhf" "libfontconfig1:armhf" "libfreetype6:armhf" "libglu1-mesa:armhf" "libglu1:armhf" "libgnutls30:armhf" "libgssapi-krb5-2:armhf" "libkrb5-3:armhf" "libodbc1:armhf" "libosmesa6:armhf" "libsdl2-2.0-0:armhf" "libv4l-0:armhf" "libxcomposite1:armhf" "libxcursor1:armhf" "libxfixes3:armhf" "libxi6:armhf" "libxinerama1:armhf" "libxrandr2:armhf" "libxrender1:armhf" "libxxf86vm1") # 省略其他包以简化示例  

# 函数:查询并返回armhf包的最新版本  
get_armhf_version() {  
    local pkg="$1"  
    local version=$(apt-cache madison "$pkg" | tail -n 1 | awk '{print $3}')  
    echo "$version"  
}  


# 函数:尝试安装特定版本的armhf包  
attempt_install() {  
    local pkg="$1"  
    local version="$2"  
    sudo apt-get install "$pkg"="$version" && {  
        echo "Successfully installed $pkg version $version"  
        return 0  
    } || {  
        echo "Failed to install $pkg version $version"  
        return 1  
    }  
}
  

# 遍历armhf包列表,并尝试安装对应版本的armhf包  
for pkg in "${armhf_packages[@]}"; do  
    # 获取arm64包名(去掉:armhf)  
    arm64_pkg="${pkg%:armhf}"  
    echo "Processing" $arm64_pkg
      
    # 检查arm64包是否已安装  
    if dpkg -s "$arm64_pkg" &> /dev/null; then  
      # 获取arm64包的版本号  
      arm64_version=$(dpkg -s "$arm64_pkg" | grep '^Version:' | awk '{print $2}')  
      echo "arm64 version is" $arm64_version
    fi

    # 检查armhf包是否已安装  
    if ! dpkg -s "$pkg" &> /dev/null; then  
      # 如果不存在,尝试找到可用的armhf包版本  
      armhf_versions=$(apt-cache madison "$pkg" | awk '{print $3}')  
      if [[ -n "$armhf_versions" ]]; then  
          # 从最高版本开始尝试安装
          for armhf_version in $armhf_versions; do  
              if attempt_install "$pkg" "$armhf_version"; then  
                  break  # 安装成功,跳出循环  
              fi  
          done  
          if [[ -z "$armhf_version" ]]; then  
              echo "No suitable version of $pkg found for armhf"  
          fi  
      else  
          echo "No versions of $pkg available for armhf"  
      fi  
    else
      armhf_version=$(dpkg -s "$pkg" | grep '^Version:' | awk '{print $2}')  
      echo "armhf version is" $armhf_version
    fi 
done

三、安装Box64

输入以下命令安装最新版的box64,也可以通过源码编译安装:

sudo wget https://cdn05042023.gitlink.org.cn/shenmo7192/box64-debs/raw/branch/master/box64-CN.list -O /etc/apt/sources.list.d/box64.list
wget -qO- https://cdn05042023.gitlink.org.cn/shenmo7192/box64-debs/raw/branch/master/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg 
sudo apt update
sudo apt install box64 -y

这里也提供32位的Box86安装方法,如有需要可以输入以下命令安装最新版的Box86,也可以通过源码编译安装:

sudo wget https://itai-nelken.github.io/weekly-box86-debs/debian/box86.list -O /etc/apt/sources.list.d/box86.list
wget -qO- https://itai-nelken.github.io/weekly-box86-debs/debian/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box86-debs-archive-keyring.gpg
sudo apt update && sudo apt install box86 -y

如果无法添加源,也可以直接在下载页面下载最新的.deb安装包,然后通过dpkg -i安装。

四、安装Wine

注意:这里需要安装X64版本的Wine64和X86版本的Wine,不能安装Arm版本的Wine64,Arm版的Wine64只能安装Arm版的Windows软件
将以下shell脚本保存至本地,根据需要修改branch分支信息和version版本信息,然后sudo bash执行以下shell脚本安装Wine64:

	
	# NOTE: Can only run on aarch64 (since box64 can only run on aarch64)
	# box64 runs wine-amd64, box86 runs wine-i386.

	### User-defined Wine version variables ################
	# - Replace the variables below with your system's info.
	# - Note that we need the amd64 version for Box64 even though we're installing it on our ARM processor.
	# - Note that we need the i386 version for Box86 even though we're installing it on our ARM processor.
	# - Wine download links from WineHQ: https://dl.winehq.org/wine-builds/
  
	branch="staging" #example: devel, staging, or stable (wine-staging 4.5+ requires libfaudio0:i386)
	version="9.7" #example: "7.1"
	id="ubuntu" #example: debian, ubuntu
	dist="focal" #example (for debian): bullseye, buster, jessie, wheezy, ${VERSION_CODENAME}, etc 
	tag="-1" #example: -1 (some wine .deb files have -1 tag on the end and some don't)

  ########################################################

	# Clean up any old wine instances
	wineserver -k # stop any old wine installations from running
	rm -rf ~/.cache/wine # remove any old wine-mono/wine-gecko install files
	rm -rf ~/.local/share/applications/wine # remove any old program shortcuts

	# Backup any old wine installs
	rm -rf ~/wine-old 2>/dev/null; mv ~/wine ~/wine-old 2>/dev/null
	rm -rf ~/.wine-old 2>/dev/null; mv ~/.wine ~/.wine-old 2>/dev/null
	sudo mv /usr/local/bin/wine /usr/local/bin/wine-old 2>/dev/null
	sudo mv /usr/local/bin/wine64 /usr/local/bin/wine-old 2>/dev/null
	sudo mv /usr/local/bin/wineboot /usr/local/bin/wineboot-old 2>/dev/null
	sudo mv /usr/local/bin/winecfg /usr/local/bin/winecfg-old 2>/dev/null
	sudo mv /usr/local/bin/wineserver /usr/local/bin/wineserver-old 2>/dev/null

	# Wine download links from WineHQ: https://dl.winehq.org/wine-builds/
	# LNKA="https://dl.winehq.org/wine-builds/${id}/dists/${dist}/main/binary-amd64/" #amd64-wine links
	LNKA="https://mirrors.tuna.tsinghua.edu.cn/wine-builds/${id}/dists/${dist}/main/binary-amd64/" #amd64-wine links
	DEB_A1="wine-${branch}-amd64_${version}~${dist}${tag}_amd64.deb" #wine64 main bin
	DEB_A2="wine-${branch}_${version}~${dist}${tag}_amd64.deb" #wine64 support files (required for wine64 / can work alongside wine_i386 main bin)
		#DEB_A3="winehq-${branch}_${version}~${dist}${tag}_amd64.deb" #shortcuts & docs
	# LNKB="https://dl.winehq.org/wine-builds/${id}/dists/${dist}/main/binary-i386/" #i386-wine links
	LNKB="https://mirrors.tuna.tsinghua.edu.cn/wine-builds/${id}/dists/${dist}/main/binary-i386/" #i386-wine links
	DEB_B1="wine-${branch}-i386_${version}~${dist}${tag}_i386.deb" #wine_i386 main bin
	DEB_B2="wine-${branch}_${version}~${dist}${tag}_i386.deb" #wine_i386 support files (required for wine_i386 if no wine64 / CONFLICTS WITH wine64 support files)
	#DEB_B3="winehq-${branch}_${version}~${dist}${tag}_i386.deb" #shortcuts & docs

	# Install amd64-wine (64-bit) alongside i386-wine (32-bit)
	echo -e "Downloading wine . . ."
	wget -q ${LNKA}${DEB_A1} 
	#echo ${LNKA}${DEB_A1} 
	wget -q ${LNKA}${DEB_A2} 
	wget -q ${LNKB}${DEB_B1} 
	#wget -q ${LNKB}${DEB_B2} # 32-bits wine
	echo -e "Extracting wine . . ."
	dpkg-deb -x ${DEB_A1} wine-installer
	dpkg-deb -x ${DEB_A2} wine-installer
	dpkg-deb -x ${DEB_B1} wine-installer
	#dpkg-deb -x ${DEB_B2} wine-installer # 32-bits wine
	echo -e "Installing wine . . ."
	mv wine-installer/opt/wine* ~/wine

安装完成后,执行以下命令创建软链接并添加执行权限:

# Install symlinks
sudo ln -s ~/wine/bin/wine /usr/local/bin/wine
sudo ln -s ~/wine/bin/wine64 /usr/local/bin/wine64
sudo ln -s ~/wine/bin/wineboot /usr/local/bin/wineboot
sudo ln -s ~/wine/bin/winecfg /usr/local/bin/winecfg
sudo ln -s ~/wine/bin/wineserver /usr/local/bin/wineserver
sudo chmod +x /usr/local/bin/wine /usr/local/bin/wine64 /usr/local/bin/wineboot /usr/local/bin/winecfg /usr/local/bin/wineserver

五、初始化wine配置

执行以下命令对wine进行初始化,可能出现一些错误提示,会影响特定Windows软件运行,暂时不用理会:

wine64 wineboot

将自动在当前用户根目录下创建.wine文件夹,里面存放了运行Windows系统必备的库文件。
安装过程中,终端窗口会有错误提示,暂时不用理会。Wine Mono安装器会有以下提示,需要安装.net运行库,安装时间较长,如果不需要安装基于.net架构的windows软件,可以点击取消,后续需要的时候再安装。在这里插入图片描述
运行完成之后,打开~/.wine/drive_c目录,我们可以找到熟悉的Windows系统文件夹,包含了运行Windows应用所必须的库文件。
在这里插入图片描述
将64位Windows应用的安装包上传到银河麒麟系统,然后可以通过以下命令直接安装Windwos应用,将${PathToYourProgramName}改为Windows安装包的路径:

wine64 ${PathToYourProgramName}

这里只测试了常用的压缩软件7z,其它软件大家可以根据需要进行测试,由于部分运行库尚未安装,可能出现一些运行问题。
在这里插入图片描述
这里选择安装目录为C:\Program Files\,也可以选择其它安装位置,安装完成后,进入~/.wine/drive_c/‘Program Files’/目录下,可以看到7-Zip已经安装好了。
在这里插入图片描述
输入以下命令即可启动7-Zip程序:

wine64 7zFM.exe

在这里插入图片描述

应用窗口启动了,但是出现了乱码,这是由于缺少中文字体导致的,参考前辈的文章,直接复制windows 系统c:/windows/fonts 目录到 ~/.wine/drive_c/windows/Fonts ,然后重新启动应用即可解决。


总结

本文介绍了基于Box64和Wine64实现在国产Arm版本银河麒麟系统上安装64位Windows应用,如果需要安装32位应用,其安装过程类似,只需将第三节更改为安装Box86,将第四节脚本关于wine64的部分注释掉,更改为下载和安装DEB_B1和DEB_B2即可。

由于不可描述的原因,也测试了XX版的银河麒麟,但是存在大量依赖冲突,无法安装,尝试了添加Ubuntu源,Box64+Wine64安装成功,但是UKUI界面无法使用,无奈安装了slim和xfce桌面,使用上是没问题,但是Ukui是用不了了,如有需要,可以留言交流安装方法。

在撰写本文之前,查阅了大量前辈的文章,但是截止目前,还没有找到完整的Arm版银河麒麟运行Windows软件的文章,因为不可描述的原因,无奈下定决心解决这一问题,前前后后大概用了半个月的时间,总算有所收获。其实主要问题在于银河麒麟官方源的运行库存在大量冲突,稍有不慎,就可能导致Ukui无法运行,原生的Arm版Ubuntu基本不存在依赖冲突,可以直接安装。

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

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

相关文章

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)

Mybatis 0、环境准备0.1 准备数据库表emp;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增(主键返回)1.3 更新1.4 查询(解决字段名与类属性名…

MySQL两阶段提交目的

阶段提交的过程 事务执行阶段:事务开始执行,InnoDB执行SQL语句的具体操作,如数据修改、删除等,并将这些操作记录在内存中。写入Redo Log(准备阶段):事务即将提交时,首先将事务相关的…

基于elementui的远程搜索下拉选择分页组件

在开发一个练手项目的时候&#xff0c;需要一个远程搜索的下拉选择组件&#xff1b; elementui自带的el-select支持远程搜索&#xff1b;但如果一次性查询的数据过多&#xff1b;会导致卡顿。故自己实现一个可分页的远程下拉选择组件 效果&#xff1a; 代码&#xff1a; <…

网页端五子棋对战(二)---数据库连接用户登录注册接口设计postman验证

文章目录 1.用户模块--数据库的设计1.1idea新建db.sql文件1.2mysql建库建表 2.使用mybatis操作数据库2.1修改spring配置文件2.2创建实体类用户user2.3创建Mapper接口2.4实现xml配置文件 3.前后端交互接口架构4.后端代码实现4.1登录模块4.2注册模块4.3获取用户信息 5.postman验证…

ElementUI 问题清单

1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为&#xff0c;给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…

数据科学与大数据之间的区别

什么是数据科学&#xff1f; 数据科学是一个跨学科领域&#xff0c;它将统计学和计算方法相结合&#xff0c;旨在从数据中提取见解和知识。它涉及收集、处理、分析以及解读数据&#xff0c;以揭示可用于为决策过程提供依据并推动创新的模式、趋势和关系。 数据科学涵盖了广泛…

2024 数学建模国一经验分享

2024 数学建模国一经验分享 背景&#xff1a;武汉某211&#xff0c;专业&#xff1a;计算机科学 心血来潮&#xff0c;就从学习和组队两个方面指点下后来者&#xff0c;帮新人避坑吧 2024年我在数学建模比赛中获得了国一&#xff08;教练说论文的分数是湖北省B组第一&#xff0…

利用断开的域管理员RDP会话提权

前言 当域内管理员登录过攻击者可控的域内普通机器运维或者排查结束后&#xff0c;退出3389时没有退出账号而是直接关掉了远程桌面&#xff0c;那么会产生哪些风险呢&#xff1f;有些读者第一个想到的肯定就是抓密码&#xff0c;但是如果抓不到明文密码又或者无法pth呢&#x…

在c#控制台中使用Raylib-cs库,绘制控制小球和插入音频(附带c++中小球的控制代码)

下载网址 GitHub - chrisdill/raylib-cs: C# bindings for raylib, a simple and easy-to-use library to learn videogames programming 克隆库 克隆GitHub仓库-CSDN博客 1 .制作dll 点击 生成之后就会多出这些东西 2.在项目中添加dll 然后就导进来了 测试一下用例代码 …

11月 | Apache SeaTunnel月度进展总结

各位热爱 Apache SeaTunnel 的小伙伴们&#xff0c;社区10月份月报更新啦&#xff01;这里将记录 SeaTunnel 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度Merge之星 感谢以下小伙伴 11 月份为 Apache SeaTunnel 所做的精彩贡献&#xff08;排名不分先后&#xf…

实数与复数频谱掩蔽在音频分离中的应用

使用实数和复数频谱掩蔽进行音频分离 频谱掩蔽是指在音频信号的频谱表示中&#xff0c;通过选择性地增强或抑制某些频率成分来改善信号质量或实现信号分离的技术。频谱掩蔽可以分为两种类型&#xff1a;实数掩蔽和复数掩蔽。 实数频谱掩蔽 实数频谱掩蔽主要关注音频信号的幅…

数学建模之RSR秩和比综合评价法(详细)

RSR秩和比综合评价法 一、概述 秩和比法(Rank-sum ratio&#xff0c;简称RSR法)是我国学者田凤调于1988年提出的&#xff0c;田教授是我国杰出的卫生统计学家&#xff0c;该方法最初提出时用于解决医学卫生领域的综合评价问题&#xff0c;后经各领域学者的补充和完善&#xf…

【贪心算法】贪心算法五

贪心算法五 1.跳跃游戏 II2.跳跃游戏3.加油站3.单调递增的数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.跳跃游戏 II 题目链接&…

STM32编码器接口及编码器测速模板代码

编码器是什么&#xff1f; 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器&#xff0c;我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分&#xff0c;可以分为增量式编码器和绝对式编码器。 从编码器检测原理上来分&#xff0…

经典视觉神经网络1 CNN

一、概述 输入的图像都很大&#xff0c;使用全连接网络的话&#xff0c;计算的代价较高&#xff0c;图像也很难保留原本特征。 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…

黑马程序员MybatisPlus/Docker相关内容

Day01 MP相关知识 1. mp配置类&#xff1a; 2.条件构造器&#xff1a; 具体的实现例子&#xff1a; ①QuerryWapper&#xff1a; ②LambdaQueryWrapper: 3.MP的自定义SQL 4.MP的Service层的实现 5.IService下的Lambda查询 原SQL语句的写法&#xff1a; Lambda 查询语句的…

通讯专题4.1——CAN通信之计算机网络与现场总线

从通讯专题4开始&#xff0c;来学习CAN总线的内容。 为了更好的学习CAN&#xff0c;先从计算机网络与现场总线开始了解。 1 计算机网络体系的结构 在我们生活当中&#xff0c;有许多的网络&#xff0c;如交通网&#xff08;铁路、公路等&#xff09;、通信网&#xff08;电信、…

低级爬虫实现-记录HCIP云架构考试

因工作需要考HCIP云架构&#xff08;HCIP-Cloud Service Solution Architect&#xff09;证书, 特意在淘宝上买了题库&#xff0c; 考过了。 事后得知自己被坑了&#xff0c; 多花了几十大洋。 所以想着在授权期内将题库“爬”下来&#xff0c; 共享给大家。 因为整个过程蛮有…

最新AI问答创作运营系统(SparkAi系统),GPT-4.0/GPT-4o多模态模型+联网搜索提问+问答分析+AI绘画+管理后台系统

目录 一、人工智能 系统介绍文档 二、功能模块介绍 系统快速体验 三、系统功能模块 3.1 AI全模型支持/插件系统 AI大模型 多模态模型文档分析 多模态识图理解能力 联网搜索回复总结 3.2 AI智能体应用 3.2.1 AI智能体/GPTs商店 3.2.2 AI智能体/GPTs工作台 3.2.3 自…

借助 AI 工具,共享旅游-卡-项目助力年底增收攻略

年底了&#xff0c;大量的商家都在开始筹备搞活动&#xff0c;接下来的双十二、元旦、春节、开门红、寒假&#xff0c;各种活动&#xff0c;目的就是为了拉动新客户。 距离过年还有56 天&#xff0c;如何破局&#xff1f; 1、销售渠道 针对旅游卡项目&#xff0c;主要销售渠道…