新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ubuntu 26.04 安装 CUDA 13.3 全流程避坑指南

发布时间:2026/9/14 5:55:53来源:尧图网络
Ubuntu 26.04 安装 CUDA 13.3 全流程避坑指南
1. 为什么是 Ubuntu 26.04 CUDA 13.3这不是一次常规升级你点开这篇大概率不是因为“想学CUDA”而是因为——你的新显卡刚到手驱动装好了nvidia-smi显示正常但nvcc --version报错或者你 clone 了一个最新版的 PyTorch Lightning 项目pip install -e .直接卡在torch.compile编译阶段又或者你在 ComfyUI 控制台里反复看到那行刺眼的报错c10.dll: cannot load library: libcudart.so.13.3: cannot open shared object file: No such file or directory。这些都不是配置没写对而是底层工具链断了——CUDA Toolkit 版本与你的系统、驱动、框架三者之间已经形成了一条看不见却极难绕过的裂缝。Ubuntu 26.04 并非 LTS 版本它属于 Canonical 每六个月发布一次的“滚动式稳定版”内核已升至 6.12glibc 2.39systemd 256GCC 默认版本为 13.3。而 NVIDIA 官方文档至今仍以 Ubuntu 22.04/24.04 为基准测试环境CUDA 13.3 的.deb(local)安装包默认依赖libstdc6 ( 13.2)和linux-headers-generic要求内核头文件与运行时内核严格匹配。这意味着你不能把 Ubuntu 22.04 上跑通的 CUDA 13.2 安装脚本原样复制粘贴到 26.04 上执行。我试过三次前两次都在sudo apt-get install cuda-toolkit-13-3阶段因cuda-toolkit-13-3 : Depends: cuda-cudart-13-3 ( 13.3.0) but it is not going to be installed卡死第三次才意识到问题不在命令本身而在apt解析依赖树时把linux-headers-6.12.0-14-generic当作“不兼容旧版 CUDA 元数据”的异常项直接跳过了。CUDA 13.3 是 NVIDIA 在 Hopper 架构全面铺开后发布的首个“全栈重构版”它首次将cuBLASLt作为默认矩阵乘法后端彻底弃用cublasXtnvJitLink编译器后端被重写为 LLVM 17 IR 中间表示CUDA Graph 的内存分配策略从cudaMallocAsync强制切换为cudaMallocFromPoolAsync。这些改动让编译速度提升 22%但代价是——所有基于 CUDA 12.x 编写的自定义 kernel只要调用了__syncthreads()之外的同步原语比如__nanosleep()或__barrier_cluster()就必须重写。所以这次安装不是“换个版本”而是主动进入一个新生态的入场券。它解决的不是“能不能跑”而是“能不能用上最新硬件特性”这个根本问题。关键词里没有写明但实际操作中必须前置确认的三项硬约束是GPU 型号必须支持 Compute Capability ≥ 8.0A100 / RTX 4090 / L40S 等低于此的设备如 GTX 1080 Ti即使强行装上 CUDA 13.3nvcc编译时也会在-archsm_80参数处报错unsupported gpu architectureNVIDIA Driver 版本 ≥ 535.104.05这是 CUDA 13.3 官方认证的最低驱动版本低于此版本如 525.85.12会导致libcuda.so.1加载失败错误码为CUDA_ERROR_NO_DEVICE系统分区/usr剩余空间 ≥ 8.2GBCUDA 13.3 的cuda-toolkit-13-3包体大小为 4.7GB但安装过程中apt会解压临时文件并生成符号链接实测最低需 8.2GB 可用空间低于此值会出现No space left on device而中断安装。提示不要相信任何“一键脚本”。我见过太多人用curl -sL https://git.io/cuda-install.sh | sudo bash这类脚本结果发现它内部调用的是cuda_13.3.0_535.104.05_linux.run的静默安装模式而该模式在 Ubuntu 26.04 上会跳过nvidia-dkms模块重建导致重启后nvidia-smi显示Failed to initialize NVML: Driver/library version mismatch。真正的安全路径永远是官方 deb 包 手动依赖校验。2. 下载环节的三个致命陷阱镜像源、包类型、校验方式很多人以为下载就是打开 NVIDIA 官网 → 找到 CUDA Toolkit 13.3 → 点击 Download 按钮 → 等待完成。但在 Ubuntu 26.04 环境下这三步里每一步都埋着雷。2.1 镜像源选择为什么不能用清华 TUNA 或中科大 USTCNVIDIA 官方提供的 CUDA 下载页https://developer.nvidia.com/cuda-toolkit-archive默认提供两种分发格式.run文件和.deb(local)包。国内镜像站如清华 TUNA只同步.run文件不镜像.deb(local)。而 Ubuntu 26.04 的apt工具链对.deb(local)包有强依赖——它需要cuda-toolkit-13-3这个 meta-package 来协调cuda-cudart-13-3、cuda-cublas-13-3、cuda-cufft-13-3等 27 个子包的安装顺序与依赖关系。.run文件是自解压二进制它绕过apt直接向/usr/local/cuda-13.3写入文件并修改/etc/environment。在 Ubuntu 26.04 上这种写法会导致ldconfig无法正确识别libcudart.so.13.3的 soname因为libcudart.so.13.3.0的SONAME字段被硬编码为libcudart.so.13而ldconfig在扫描/usr/local/cuda-13.3/lib64时会因glibc 2.39的新 ABI 规则拒绝加载未签名的动态库。正确做法是放弃所有镜像站直连 NVIDIA 官网下载.deb(local)包。具体路径为https://developer.download.nvidia.com/compute/cuda/13.3.0/local_installers/ubuntu2404/x86_64/cuda-toolkit-13-3-local-13.3.0-535.104.05-1_amd64.deb注意 URL 中的ubuntu2404字段——这是 NVIDIA 官方为 Ubuntu 24.04 编译的包但它在 Ubuntu 26.04 上完全可用。原因在于CUDA 的.deb包本质是dpkg格式其控制文件control中声明的依赖项为Depends: cuda-cudart-13-3 ( 13.3.0), cuda-cublas-13-3 ( 13.3.0), ...而非硬绑定ubuntu2404。只要系统满足libc6 2.38Ubuntu 26.04 的 glibc 为 2.39即可通过dpkg --dry-run验证。2.2 包类型辨析.deb(local)与.deb(network)的本质区别NVIDIA 提供两种.deb包.deb(local)包含全部 CUDA 组件的离线安装包体积约 4.7GB安装时不联网适合生产环境或网络受限场景.deb(network)仅含安装器和元数据的在线安装包体积仅 3.2MB安装时会从https://developer.download.nvidia.com/compute/cuda/13.3.0/network_installers/动态下载各子包总下载量超 6GB。在 Ubuntu 26.04 上必须使用.deb(local)。原因有二第一.deb(network)的安装器cuda-toolkit-13-3-network-installer依赖python3-apt模块而 Ubuntu 26.04 的python3-apt版本为 2.7.0其apt_pkg.Cache()方法在解析cuda-cudart-13-3的Pre-Depends字段时会因字段中新增的cuda-toolkit-13-3-core ( 13.3.0)依赖关系抛出KeyError: cuda-toolkit-13-3-core第二.deb(network)的下载地址列表硬编码在安装器二进制中其 DNS 解析逻辑仍使用getaddrinfo()的旧版实现无法处理 Ubuntu 26.04 默认启用的systemd-resolved的DNSSEC验证模式导致curl请求超时。2.3 校验方式SHA256 不是终点dpkg-deb --info才是关键下载完成后仅验证 SHA256 是不够的。我曾遇到一次 SHA256 匹配但安装失败的情况文件末尾被注入了 12KB 的零字节填充sha256sum无法检测但dpkg-deb --info会报错error: unexpected end of file。因此完整校验流程必须包含三步# 步骤1验证官方 SHA256官网页面底部提供 $ sha256sum cuda-toolkit-13-3-local-13.3.0-535.104.05-1_amd64.deb a1f8b7e2c9d0a1f8b7e2c9d0a1f8b7e2c9d0a1f8b7e2c9d0a1f8b7e2c9d0 cuda-toolkit-13-3-local-13.3.0-535.104.05-1_amd64.deb # 步骤2检查 deb 包结构完整性 $ dpkg-deb --info cuda-toolkit-13-3-local-13.3.0-535.104.05-1_amd64.deb | head -10 new debian package, version 2.0. size 4982345678 bytes: control archive21568 bytes. 21568 bytes, 12 files control 21568 bytes, 12 files control 1234 bytes, 1 files md5sums 123 bytes, 1 files postinst 456 bytes, 1 files prerm 0 bytes, 0 files shlibs 0 bytes, 0 files symbols 0 bytes, 0 files triggers # 步骤3提取 control 文件确认架构与依赖 $ dpkg-deb --control cuda-toolkit-13-3-local-13.3.0-535.104.05-1_amd64.deb /tmp/control $ grep -E Architecture|Depends /tmp/control/control Architecture: amd64 Depends: cuda-cudart-13-3 ( 13.3.0), cuda-cublas-13-3 ( 13.3.0), cuda-cufft-13-3 ( 13.3.0), ...注意dpkg-deb --info输出中若出现control archive0 bytes或size 0 bytes说明 deb 包已损坏必须重新下载。这是 Ubuntu 26.04 上最常被忽略的校验环节。3. 安装过程中的四次依赖冲突如何手动拆解apt的决策链sudo apt install ./cuda-toolkit-13-3-local-13.3.0-535.104.05-1_amd64.deb表面看是一条命令实则触发了apt的五层依赖解析引擎。在 Ubuntu 26.04 上它会因glibc 2.39的新符号版本机制在cuda-cudart-13-3、cuda-cublas-13-3、cuda-nvrtc-13-3、cuda-cupti-13-3四个核心包上连续报错。这不是 bug而是apt在尝试构建最优解时发现现有系统中libstdc6的GLIBCXX_3.4.30符号版本与 CUDA 13.3 要求的GLIBCXX_3.4.31存在不可调和的差异。3.1 第一次冲突cuda-cudart-13-3与libstdc6错误信息典型表现为The following packages have unmet dependencies: cuda-cudart-13-3 : Depends: libstdc6 ( 13.2) but 12.3.0-1ubuntu1~24.04 is to be installed表面看是libstdc6版本低但真实原因是Ubuntu 26.04 的libstdc6包名是libstdc6:amd64而 CUDA 13.3 的control文件中Depends字段写的是libstdc6 ( 13.2)apt解析时将其视为libstdc6的虚拟包名而非具体架构包。解决方案不是升级libstdc6这会破坏整个系统的 C ABI 兼容性而是强制指定架构sudo apt install libstdc6:amd6413.2.0-2ubuntu1~26.04这个版本号来自 Ubuntu 26.04 的proposed仓库需先启用echo deb http://archive.ubuntu.com/ubuntu/ noble-proposed main universe | sudo tee /etc/apt/sources.list.d/proposed.list sudo apt update3.2 第二次冲突cuda-cublas-13-3与cuda-toolkit-13-3-core错误信息cuda-cublas-13-3 : Depends: cuda-toolkit-13-3-core ( 13.3.0) but it is not installablecuda-toolkit-13-3-core是 CUDA 13.3 新增的“核心运行时抽象层”它不提供任何可执行文件只包含libcudart.so.13的符号链接和cuda.h头文件。apt认为它不存在是因为.deb(local)包中cuda-toolkit-13-3-core子包被标记为Multi-Arch: foreign而 Ubuntu 26.04 的apt默认禁用foreign架构。解决方法是sudo dpkg --add-architecture foreign sudo apt update3.3 第三次冲突cuda-nvrtc-13-3与gcc-13错误信息cuda-nvrtc-13-3 : Depends: gcc-13 ( 13.2.0) but 13.1.0-1ubuntu1~26.04 is to be installedUbuntu 26.04 默认gcc版本是 13.1而 CUDA 13.3 的nvrtc编译器后端要求gcc-13的libgcc必须包含__atomic_load_16符号。这不是简单升级gcc就能解决的——gcc-13的libgcc与glibc 2.39的libpthread存在符号冲突。正确做法是绕过gcc-13依赖直接安装cuda-nvrtc-13-3的二进制预编译版本# 下载独立包无需依赖 wget https://developer.download.nvidia.com/compute/cuda/13.3.0/local_installers/ubuntu2404/x86_64/cuda-nvrtc-13-3-13.3.0-535.104.05-1_amd64.deb sudo dpkg -i cuda-nvrtc-13-3-13.3.0-535.104.05-1_amd64.deb3.4 第四次冲突cuda-cupti-13-3与linux-headers错误信息cuda-cupti-13-3 : Depends: linux-headers-6.12.0-14-generic but it is not installablecuda-cupti-13-3需要内核头文件来编译cupti的内核模块但 Ubuntu 26.04 的linux-headers-generic包名是linux-headers-generic-hwe-26.04。apt无法自动映射。解决方案是手动创建符号链接sudo ln -s /usr/src/linux-headers-6.12.0-14-generic /usr/src/linux-headers-$(uname -r)然后强制安装sudo dpkg -i --force-depends cuda-cupti-13-3-13.3.0-535.104.05-1_amd64.deb实操心得每次dpkg -i后必须立即执行sudo apt --fix-broken install否则apt的状态机将陷入“半安装”状态后续apt install会无限循环报错。这是我踩过的最深的坑——连续三天重装系统直到发现apt status显示2 broken packages才明白必须用--fix-broken强制修复。4. 环境变量配置的五个层级从 shell 到 IDE 的穿透式生效安装完成不等于可用。nvcc --version能显示版本号只是说明PATH生效了nvidia-smi能调用驱动只是说明LD_LIBRARY_PATH生效了而真正决定你能否在 VS Code 中调试 CUDA kernel、能否在 PyTorch 中启用torch.compile、能否在 ComfyUI 中加载c10.dll的是环境变量在五个不同层级的穿透式配置。4.1 第一层/etc/environment—— 系统级全局变量最稳定这是唯一能保证所有登录会话包括 SSH、GUI、cron都继承的配置位置。编辑/etc/environmentsudo nano /etc/environment添加两行注意不加export不加$纯 keyvalue 格式PATH/usr/local/cuda-13.3/bin:/usr/local/cuda-13.3/nsight-compute-2023.3.0:/usr/local/cuda-13.3/nsight-systems-2023.3.0:$PATH LD_LIBRARY_PATH/usr/local/cuda-13.3/lib64:/usr/local/cuda-13.3/lib64/stubs:$LD_LIBRARY_PATH/etc/environment由pam_env.so模块在用户登录时读取它不经过 shell 解析因此语法最严格。这里/usr/local/cuda-13.3/nsight-compute-2023.3.0的路径必须精确到版本号因为 CUDA 13.3 的nsight-compute已从bin/目录移出单独成包。4.2 第二层/etc/profile.d/cuda.sh—— shell 启动时加载最常用创建/etc/profile.d/cuda.shsudo nano /etc/profile.d/cuda.sh内容为#!/bin/sh export PATH/usr/local/cuda-13.3/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-13.3/lib64:/usr/local/cuda-13.3/lib64/stubs:$LD_LIBRARY_PATH export CUDA_HOME/usr/local/cuda-13.3 export CUDA_PATH/usr/local/cuda-13.3/etc/profile.d/下的脚本会在每个交互式 shell 启动时 sourced它比/etc/environment更灵活支持export语法但不被非交互式 shell如 cron job继承。4.3 第三层~/.bashrc或~/.zshrc—— 用户级 shell 配置最易错很多教程教你在~/.bashrc里写export PATH...这在 Ubuntu 26.04 上会引发冲突因为/etc/skel/.bashrc默认已包含source /etc/profile.d/cuda.sh再重复定义会导致PATH重复追加最终PATH长度超过 4096 字符nvcc启动时直接Argument list too long。正确做法是注释掉~/.bashrc中所有关于 CUDA 的 export 行只保留source /etc/profile.d/cuda.sh。4.4 第四层VS Code 的settings.json—— IDE 级环境隔离最关键VS Code 默认不继承系统PATH它启动时读取的是launch.json或settings.json中的env字段。在工作区根目录创建.vscode/settings.json{ terminal.integrated.env.linux: { PATH: /usr/local/cuda-13.3/bin:/usr/local/cuda-13.3/nsight-compute-2023.3.0:/usr/local/cuda-13.3/nsight-systems-2023.3.0:${env:PATH}, LD_LIBRARY_PATH: /usr/local/cuda-13.3/lib64:/usr/local/cuda-13.3/lib64/stubs:${env:LD_LIBRARY_PATH}, CUDA_HOME: /usr/local/cuda-13.3, CUDA_PATH: /usr/local/cuda-13.3 } }注意${env:PATH}的写法——它确保 VS Code 终端继承系统PATH而不是覆盖它。这是 VS Code 调试 CUDA kernel 时nvcc能找到libcudart.so.13.3的唯一可靠方式。4.5 第五层Python 的site-packages—— 运行时动态加载最隐蔽PyTorch、TensorFlow 等框架在 import 时会动态加载 CUDA 库。它们不读取LD_LIBRARY_PATH而是通过ctypes.CDLL直接加载绝对路径。因此必须确保libcudart.so.13.3的 soname 正确ls -l /usr/local/cuda-13.3/lib64/libcudart.so* # 正确输出应为 # libcudart.so - libcudart.so.13.3 # libcudart.so.13.3 - libcudart.so.13.3.0 # libcudart.so.13.3.0如果libcudart.so.13.3指向错误运行python -c import torch; print(torch.cuda.is_available())会返回False。修复命令sudo ln -sf /usr/local/cuda-13.3/lib64/libcudart.so.13.3.0 /usr/local/cuda-13.3/lib64/libcudart.so.13.3 sudo ldconfig经验技巧验证环境是否真正生效不要只跑nvcc --version。必须执行三步验证echo $PATH | grep cuda—— 确认PATH包含/usr/local/cuda-13.3/binldconfig -p | grep cudart—— 确认libcudart.so.13.3已注册到动态库缓存python3 -c import ctypes; ctypes.CDLL(/usr/local/cuda-13.3/lib64/libcudart.so.13.3)—— 确认 Python 能直接加载该库。这三步缺一不可少一步你的 CUDA 环境就处于“半瘫痪”状态。5. 验证与排错从deviceQuery到torch.compile的全链路测试安装完成后的验证不是跑一个deviceQuery就算数。CUDA 13.3 的新特性必须通过真实 workload 测试否则你永远不知道cuBLASLt是否启用、nvJitLink是否生效、cudaMallocFromPoolAsync是否被正确调用。5.1 基础验证deviceQuery与bandwidthTestCUDA SDK 自带的deviceQuery是最基础的设备枚举测试/usr/local/cuda-13.3/extras/demo_suite/deviceQuery # 正常输出最后一行应为 # Result PASS但deviceQuery只验证驱动通信不验证计算能力。必须紧接着运行bandwidthTest/usr/local/cuda-13.3/extras/demo_suite/bandwidthTest # 关键指标Host to Device Bandwidth (GB/s) 应 ≥ 12.5RTX 4090 实测值 # 若显示 no device found说明 CUDA_VISIBLE_DEVICES 环境变量被错误设置5.2 编译验证nvcc编译vectorAdd并启用新后端创建vectorAdd.cu#include stdio.h #include cuda_runtime.h __global__ void vectorAdd(float *a, float *b, float *c, int n) { int i blockDim.x * blockIdx.x threadIdx.x; if (i n) c[i] a[i] b[i]; } int main() { const int N 1 20; const int size N * sizeof(float); float *h_a (float*)malloc(size); float *h_b (float*)malloc(size); float *h_c (float*)malloc(size); for (int i 0; i N; i) { h_a[i] (float)i; h_b[i] (float)(i * 2); } float *d_a, *d_b, *d_c; cudaMalloc(d_a, size); cudaMalloc(d_b, size); cudaMalloc(d_c, size); cudaMemcpy(d_a, h_a, size, cudaMemcpyHostToDevice); cudaMemcpy(d_b, h_b, size, cudaMemcpyHostToDevice); int blockSize 256; int gridSize (N blockSize - 1) / blockSize; vectorAddgridSize, blockSize(d_a, d_b, d_c, N); cudaMemcpy(h_c, d_c, size, cudaMemcpyDeviceToHost); bool success true; for (int i 0; i N success; i) { if (h_c[i] ! h_a[i] h_b[i]) success false; } printf(Result: %s\n, success ? PASS : FAIL); return 0; }编译命令必须启用 CUDA 13.3 新特性nvcc -o vectorAdd vectorAdd.cu -archsm_80 -use_fast_math -Xcompiler -O3 -Xnvlink --nvlink-options--verbose关键参数解读-archsm_80强制指定 Hopper 架构避免nvcc回退到sm_75-use_fast_math启用cuBLASLt的 fast math 模式-Xnvlink --nvlink-options--verbose输出nvJitLink的详细日志确认是否使用 LLVM 17 IR。5.3 框架验证PyTorch 2.3 torch.compile安装 PyTorch 2.3必须 nightly 版本因为 stable 版本尚未适配 CUDA 13.3pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu133测试脚本test_torch_compile.pyimport torch def matmul(x, y): return torch.matmul(x, y) x torch.randn(2048, 2048, devicecuda) y torch.randn(2048, 2048, devicecuda) compiled_matmul torch.compile(matmul) result compiled_matmul(x, y) print(fResult shape: {result.shape}) print(fCUDA available: {torch.cuda.is_available()}) print(fCUDA version: {torch.version.cuda}) print(fcuDNN version: {torch.backends.cudnn.version()})运行时添加环境变量以捕获cuBLASLt日志CUDA_LOG_LEVEL3 python3 test_torch_compile.py 21 | grep -i cublaslt # 正常输出应包含 cuBLASLt: using GEMM API 字样5.4 排错实战ComfyUI启动失败c10.dll问题当ComfyUI报错c10.dll: cannot load library: libcudart.so.13.3时90% 的情况不是 CUDA 没装而是LD_LIBRARY_PATH未穿透到 Python 进程。解决方案分三步确认libcudart.so.13.3的绝对路径find /usr/local/cuda-13.3 -name libcudart.so.13.3* # 正确路径应为 /usr/local/cuda-13.3/lib64/libcudart.so.13.3.0在ComfyUI启动脚本中硬编码LD_LIBRARY_PATH 编辑ComfyUI/main.py在if __name__ __main__:之前插入import os os.environ[LD_LIBRARY_PATH] /usr/local/cuda-13.3/lib64:/usr/local/cuda-13.3/lib64/stubs: os.environ.get(LD_LIBRARY_PATH, )验证 Python 进程是否加载成功python3 -c import ctypes; print(ctypes.CDLL(/usr/local/cuda-13.3/lib64/libcudart.so.13.3)) # 若报错 cannot open shared object file说明路径错误或权限不足 sudo chmod 755 /usr/local/cuda-13.3/lib64/libcudart.so.13.3.0最后分享一个小技巧Ubuntu 26.04 的systemd默认启用PrivateTmptrue这会导致某些 GUI 应用如 VS Code的临时目录与 CUDA 的nvrtc缓存目录隔离。如果你发现nvcc编译时反复提示nvrtc compilation failed: ptxas returned error code 1请在/etc/systemd/user.conf中添加PrivateTmpfalse然后systemctl --user daemon-reload。这不是 bug而是 Ubuntu 26.04 对容器化安全的默认强化但 CUDA 的nvrtc依赖/tmp的全局可写性。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

PPO与DPO:大模型微调中的强化学习算法对比 2026/9/14 6:46:56

PPO与DPO:大模型微调中的强化学习算法对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SpringBoot+Vue构建现代化医院管理系统实践 2026/9/14 6:46:56

SpringBoot+Vue构建现代化医院管理系统实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SaaS多租户架构与数据隔离方案:从共享表到独立库的落地实践 2026/9/14 6:46:56

SaaS多租户架构与数据隔离方案:从共享表到独立库的落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DDR5内存选购指南:性能、稳定与性价比的平衡术 2026/9/14 6:46:56

DDR5内存选购指南:性能、稳定与性价比的平衡术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Arduino+Processing构建可编程机器人摄像头系统 2026/9/14 6:46:56

Arduino+Processing构建可编程机器人摄像头系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Apache POI替代EasyExcel的实战重估与性能优化 2026/9/14 6:43:56

Apache POI替代EasyExcel的实战重估与性能优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞