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

UBUNTU22.04,配置wine中调用cuda

 实验目标

客户要求:

有一个程序需要运行在云服务器上,云服务器为云容器,云容器操作系统类型为linux,程序包是基于windows环境开发的,且程序需要调用英伟达的GPU做运算,云容器不能支持虚拟化,于是乎,考虑搭建wine环境,用于运行支持exe,wine环境中需要配置NVIDIA库,用于支持NVIDIA,次实验仅供参考(适用于exe程序需要调用GPU做运算参考例子)

环境:

docker云容器

系统版本:ubuntu22.04 

cuda:12.1

显卡驱动:550.107

docker容器:官方镜像,不支持嵌套docker,虚拟化

英伟达信息:输出信息如下

(base) root@e875ed63543f:~# nvidia-smi
Wed Nov 20 06:30:49 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.107.02             Driver Version: 550.107.02     CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4090        On  |   00000000:4F:00.0 Off |                  Off |
| 30%   32C    P8             29W /  450W |       2MiB /  24564MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
(base) root@e875ed63543f:~# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
(base) root@e875ed63543f:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"
(base) root@e875ed63543f:~#

 

安装cuda12.1

并配置驱动,步骤省略,我其他博客有记录

IT杂物铺-CSDN博客

Ubuntu22.04.4安装配置CUDA12.5,Cdnn官方详细版本_ubuntu 22.04.4-CSDN博客

wine-9.21安装

官方网站参考:

Debian/Ubuntu · Wiki · wine / wine · GitLab

sudo dpkg --add-architecture i386sudo mkdir -pm755 /etc/apt/keyringssudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.keysudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sourcessudo apt updatesudo apt install --install-recommends winehq-develsudo apt install --install-recommends winetricks

安装完毕,执行wine  --version查看版本,执行winecfg,目录会创建.wine 目录

(base) root@e875ed63543f:~# wine --version
wine-9.21
(base) root@e875ed63543f:~# winecfg
0024:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 32 supported!
002c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0034:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
003c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0044:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0050:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0044:err:vulkan:vulkan_init_once Failed to load libvulkan.so.1
0074:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0044:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0044:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
0044:err:systray:initialize_systray Could not create tray window
00b8:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
00d0:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
00f0:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
010c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
011c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 32 supported!
0124:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0124:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0124:err:winediag:nodrv_CreateWindow L"Make sure that your display server is running and that its variables are set."
(base) root@e875ed63543f:~# ll .wine/
total 3088
drwxr-xr-x 4 root root     117 Nov 20 06:25 ./
drwx------ 1 root root     239 Nov 20 06:27 ../
-rw-r--r-- 1 root root      12 Nov 20 05:58 .update-timestamp
drwxr-xr-x 2 root root      26 Nov 20 05:58 dosdevices/
drwxr-xr-x 7 root root     101 Nov 20 05:59 drive_c/
-rw-r--r-- 1 root root 3127457 Nov 20 06:25 system.reg
-rw-r--r-- 1 root root   24008 Nov 20 06:25 user.reg
9-rw-r--r-- 1 root root    4026 Nov 20 06:25 userdef.reg
(base) root@e875ed63543f:~#

 

添加NVIDIA库

(依赖环境参见,项目中的cuda版本)

文件我上传了一份

【免费】wine下的NVIDIA库支持资源-CSDN文库

 

项目地址:

GitHub - SveSop/nvidia-libs: Collection of nVidia libraries for use with Wine or Steam Proton.

 

脚本下载地址

https://github.com/SveSop/nvidia-libs/releases/download/v0.7.20/nvidia-libs-0.7.20.tar.xz

 

执行安装,WINEPREFIX 为你的.wine目录,我的是/root/.wine 

WINEPREFIX=/your/wine/prefix ./setup_nvlibs.sh install

我本机测试输出如下,正式版忘记截图保存了

wx@wx-virtual-machine:~/nvidia-libs-release$ WINEPREFIX=/home/wx/.wine/  /home/wx/nvidia-libs-release/setup_nvlibs.sh  install
[1/2] nvcuda :Creating DLL override...Creating symlink to nvcuda.dll.so...
[2/2] nvapi :Creating DLL override...Creating symlink to nvapi.dll...
[1/4] 64 bit nvcuda :Creating DLL override...Creating symlink to nvcuda.dll.so...
[2/4] 64 bit nvoptix :Creating DLL override...Creating symlink to nvoptix.dll.so...
[3/4] 64 bit nvapi64 :Creating DLL override...Creating symlink to nvapi64.dll...
[4/4] 64 bit nvofapi64 :Creating DLL override...Creating symlink to nvofapi64.dll...
Symlinks created in /home/wx/.wine/. Do NOT remove this source folder!
OBS! NVML is NOT enabled by default. See Readme_nvml.txt for info or run nvml_setup.sh
You need to REMOVE old overrides if older version of nvml have been used in /home/wx/.wine/

 

检查dll文件

(base) root@e875ed63543f:~# ldd .wine/drive_c/windows/system32/nvcuda.dlllinux-vdso.so.1 (0x00007fff8bd91000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3ef8550000)/lib64/ld-linux-x86-64.so.2 (0x00007f3ef8833000)
(base) root@e875ed63543f:~# ldd /usr/lib/x86_64-linux-gnu/libcuda.solinux-vdso.so.1 (0x00007ffd650d0000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f68806b4000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f688048b000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6880486000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6880481000)librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f688047c000)/lib64/ld-linux-x86-64.so.2 (0x00007f6882376000)
(base) root@e875ed63543f:~#

 

执行脚本运行测试,(使用wine 运行bat,bat脚本中调用exe程序)

(base) root@e875ed63543f:~/run# wine run1.bat
0024:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 32 supported!
002c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0034:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
003c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0044:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0050:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0044:err:vulkan:vulkan_init_once Failed to load libvulkan.so.1
0074:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0044:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0044:err:winediag:nodrv_CreateWindow L"The explorer process failed to start."
0044:err:systray:initialize_systray Could not create tray window
00b8:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
00d0:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
00f0:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
010c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
011c:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 32 supported!
?Yo?A???i??A??C?????u?A>?ea?aNpipei.txt?oa?eO??i?ae???T*123456
??o?aN?au??a?Ua?ii?o??cA:  1
?>???o?aN?Yo?A?????o?: 8
?y>?Ea?ea?aN?i??ai??i??A (Y/N): y
??C??e?a???n: 7.6.0.exe -gpu -gpuId 0 -lianghao 8 -i pipei.txt
0128:fixme:ntdll:create_logical_proc_info Improve CPU info reporting: system supports 144 logical cores, but only 64 supported!
0128: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.
0128:err:ntlm:ntlm_LsaApInitializePackage no NTLM support, expect problems
2?3!Eu3E v7.60 for gpu_cudaC?oo?o&o|oA??O??aAaI?TG @fakagege
OyE??a??EUE?3E1|?!
Search: 2 patterns [lianghao]
Start Wed Nov 20 06:42:50 2024
Base Key: D6DF9DA47578F49D0590380C4A11907C08C008DB3E2F7F181EDFDA5B9068A314
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D11GetDevices, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D11CtxCreateOnDevice, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D11GetDirect3DDevice, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10GetDevices, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10CtxCreateOnDevice, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10GetDirect3DDevice, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10RegisterResource, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10UnregisterResource, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10MapResources, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10UnmapResources, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10ResourceSetMapFlags, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10ResourceGetSurfaceDimensions, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10ResourceGetMappedArray, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10ResourceGetMappedPointer, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10ResourceGetMappedSize, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D10ResourceGetMappedPitch, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9GetDevices, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9CtxCreateOnDevice, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
�012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9GetDirect3DDevice, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9RegisterResource, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9UnregisterResource, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9MapResources, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9UnmapResources, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
�012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9ResourceSetMapFlags, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9ResourceGetSurfaceDimensions, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9ResourceGetMappedArray, 2010, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9ResourceGetMappedPointer, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9ResourceGetMappedSize, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9ResourceGetMappedPitch, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9Begin, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9RegisterVertexBuffer, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9UnregisterVertexBuffer, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9MapVertexBuffer, 3020, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9UnmapVertexBuffer, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuGetProcAddress_v2 (cuD3D9End, 2000, 0) The SYMBOL ADDRESS was NOT found! Returned CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND
012c:fixme:nvcuda:wine_cuDeviceGetLuid Fix this LUID: dead0000-00000000
GPU: GPU #0 NVIDIA GeForce RTX 4090 (128x0 cores) Grid(1024x128)

结尾输出GPU信息正确,环境库已生效,ubuntu下运行exe调用GPU程序成功运行

http://www.zskr.cn/news/56391.html

相关文章:

  • MySQL 8.0.12 时区设置和修改
  • 记录双系统笔记本系统损坏恢复步骤
  • 中电金信与中国金融科技的共振之路
  • 题解:NFLSOI#31351. 小吃
  • xilinx在线升级+flash操作+N25Q128
  • Day23、24:2025年10月13日、14日,星期一、二,休息。
  • gdb安装 linux
  • 2025 年评价高的四川自助洗车机厂家实力及用户口碑排行榜
  • Day18:2025年10月8日,星期三,值班,平安顺遂。
  • 【Springer|EI、SCOPUS双检索】第三届人工智能安全与隐私国际学术会议(AISP 2025)
  • C++ 中打开记录的多种方式及相关流类
  • 小泉刀拍蒜断刀事件分析:老字号的危机与出路‌
  • OceanBase Session ID 之谜
  • 2025 最新装修公司品牌推荐排行榜:高端环保 / 收纳设计 / 别墅大平层专属口碑企业精选苏州装修 / 全屋定制 / 环保 / 金属橱柜 / 铝合金橱柜装修公司推荐
  • 2025年管材激光切割机厂家权威推荐榜单:全自动激光切割机/大型激光切割机/光纤激光切割机源头厂家精选
  • 2025年实木家具定制厂家权威推荐榜单:全屋定制板材/环保板材/颗粒板源头厂家精选
  • 2025推荐 有限元仿真/FEA分析第三方外包机构排行榜:蓝图心算科技全链路生态解决方案助力仿真赋能丨流体仿真丨结构仿真丨CFD仿真
  • 2025年校园安检门定制厂家权威推荐榜单:公安局安检门/法院安检门/博物馆安检门源头厂家精选
  • 2025年市场上烤鸭饼机生产厂家排行榜:安徽惠众食品机械制造有限公司领跑行业
  • 2025年烤鸭饼机工厂推荐排行榜:安徽惠众食品机械领跑行业
  • 2025 年 11 月陕西包装盒,礼盒包装盒,西安包装盒厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 行业内排行前列的3A信用认证代理哪家专业,3A信用认证/3A信用等级认证/产品测试报告/3A信用认证申请找哪家
  • 2025 年 11 月烘焙食品包装盒,烘焙包装盒订制,月饼盒包装盒厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 2025 年 11 月注塑厂家推荐排行榜,塑胶注塑,模具注塑,精密注塑,定制注塑公司推荐,专业工艺与高效生产口碑之选
  • 告别云端依赖!ComfyUI本地化视频生成实战教程+cpolar实战 - 教程
  • Windows10 开启FTP配置
  • Day3:2025年9月24日,星期三,上班。
  • 1 - Java概述 / 变量 / 运算符 / 控制结构 / 数组 / 面向对象编程基础 / IDEA部分操作使用
  • Day2:2025年9月23日,星期二,休息。
  • QMS系统效益最大化——从实施到价值创造的全过程‌