OnlyOffice 源码编译实战:Ubuntu 20.04 Docker 环境构建与 3 大编译避坑指南
OnlyOffice 源码编译实战Ubuntu 20.04 Docker 环境构建与 3 大编译避坑指南1. 环境准备与 Docker 配置在开始 OnlyOffice 源码编译之前我们需要准备一个稳定可靠的 Docker 环境。与传统的物理机编译不同Docker 提供了环境隔离和可重复性能够有效解决不同系统环境下的兼容性问题。1.1 基础环境搭建首先确保你的系统已经安装 Docker 和 Docker Compose。以下是 Ubuntu 20.04 上的安装命令# 更新软件包索引 sudo apt-get update # 安装必要的依赖 sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common # 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加 Docker 仓库 sudo add-apt-repository \ deb [archamd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable # 安装 Docker 引擎 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 验证 Docker 安装 sudo docker run hello-world1.2 创建专用 Docker 网络为了更好的网络隔离我们创建一个专用网络docker network create onlyoffice-net1.3 准备编译目录结构创建以下目录结构用于存放源码和编译输出onlyoffice-build/ ├── docker/ │ └── Dockerfile ├── build_tools/ └── out/2. Dockerfile 配置与优化2.1 基础镜像选择我们选择 Ubuntu 20.04 作为基础镜像它提供了良好的软件包支持和长期维护FROM ubuntu:20.04 ENV TZEtc/UTC ENV DEBIAN_FRONTENDnoninteractive # 设置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone2.2 系统依赖安装OnlyOffice 编译需要大量系统依赖以下是关键依赖的安装命令RUN apt-get update \ apt-get install -y \ build-essential \ git \ python3 \ python3-pip \ nodejs \ npm \ cmake \ libssl-dev \ libpq-dev \ librabbitmq-dev \ libfontconfig1-dev \ libfreetype6-dev \ libx11-dev \ libxext-dev \ libxfixes-dev \ libxi-dev \ libxrender-dev \ libxcb1-dev \ libx11-xcb-dev \ libxcb-glx0-dev \ libxcb-keysyms1-dev \ libxcb-image0-dev \ libxcb-shm0-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxkbcommon-dev \ libxkbcommon-x11-dev \ libgl1-mesa-dev \ libglu1-mesa-dev \ freeglut3-dev \ mesa-common-dev \ libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libgstreamer-plugins-good1.0-dev \ libgstreamer-plugins-bad1.0-dev \ gstreamer1.0-plugins-base \ gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad \ gstreamer1.0-plugins-ugly \ gstreamer1.0-libav \ gstreamer1.0-doc \ gstreamer1.0-tools \ gstreamer1.0-x \ gstreamer1.0-alsa \ gstreamer1.0-gl \ gstreamer1.0-gtk3 \ gstreamer1.0-qt5 \ gstreamer1.0-pulseaudio \ libqt5svg5-dev \ libqt5webkit5-dev \ qtdeclarative5-dev \ qttools5-dev \ qttools5-dev-tools \ libqt5x11extras5-dev \ libqt5xmlpatterns5-dev \ qtbase5-private-dev \ qtmultimedia5-dev \ libqt5multimediawidgets5 \ libqt5multimedia5-plugins \ libqt5multimedia5 \ qtconnectivity5-dev \ qtlocation5-dev \ qtwebengine5-dev \ libqt5webengine5 \ libqt5webenginecore5 \ libqt5webenginewidgets5 \ qtwebengine5-dev \ libqt5websockets5-dev \ libqt5opengl5-dev \ libqt5sensors5-dev \ libqt5serialport5-dev \ libqt5sql5-sqlite \ libqt5texttospeech5-dev \ libqt5charts5-dev \ libqt5datavisualization5-dev \ libqt5scxml5-dev \ libqt5virtualkeyboard5-dev \ libqt5waylandclient5-dev \ libqt5waylandcompositor5-dev \ libqt5xdg-dev \ libqt5xdgiconloader-dev \ libqt5xdgiconloader3 \ libqt5xmlpatterns5-dev \ libqt5zlib-dev \ libsqlite3-dev \ libxslt1-dev \ libxml2-dev \ zlib1g-dev \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libwebp-dev \ libopenjp2-7-dev \ liblcms2-dev \ libjson-c-dev \ libcurl4-openssl-dev \ libicu-dev \ libpcre3-dev \ libdouble-conversion-dev \ libharfbuzz-dev \ libfreetype6-dev \ libfontconfig1-dev \ libinput-dev \ libxkbcommon-dev \ libwayland-dev \ libegl1-mesa-dev \ libgbm-dev \ libdrm-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xinput-dev \ libxcb-util-dev \ libxcb-image0-dev \ libxcb-keysyms1-dev \ libxcb-icccm4-dev \ libxcb-sync-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0

相关新闻

因果推断后门调整实战:Python 代码 3 步实现混杂因子控制与 ATE 估计

因果推断后门调整实战:Python 代码 3 步实现混杂因子控制与 ATE 估计

因果推断后门调整实战:Python代码3步实现混杂因子控制与ATE估计在数据科学和机器学习领域,我们经常需要回答"如果...那么..."这类因果问题。传统的统计方法只能揭示变量间的相关性,而因果推断则能帮助我们理解变量间的真实因果关系…

2026/7/6 21:40:31 阅读更多 →
ResNet-50 特征图可视化:从Grad-CAM到3D卷积核的5步调试法

ResNet-50 特征图可视化:从Grad-CAM到3D卷积核的5步调试法

ResNet-50特征图可视化:5步诊断模型性能瓶颈的工程实践当你的ResNet-50模型在测试集上表现不佳时,作为工程师的你首先会做什么?调整超参数?增加数据量?这些常规操作可能让你在黑暗中摸索数周却收效甚微。本文将揭示一种…

2026/7/6 21:40:31 阅读更多 →
CryptoJS前端加密实战指南:从AES到SHA-256的完整应用

CryptoJS前端加密实战指南:从AES到SHA-256的完整应用

1. 项目概述:为什么你需要一个JavaScript加密库?如果你正在开发一个Web应用,无论是处理用户密码、保护API通信,还是在前端对敏感数据进行预处理,加密都是一个绕不开的话题。你可能遇到过这样的场景:用户注册…

2026/7/6 21:38:30 阅读更多 →

最新新闻

嵌入式系统电源管理:TPS65263与PIC32MZ实战设计

嵌入式系统电源管理:TPS65263与PIC32MZ实战设计

1. 项目背景与核心需求在嵌入式系统开发中,电源管理一直是个关键挑战。随着现代MCU和外设的复杂度提升,单一电压轨已经无法满足需求。我最近在为一个工业传感器项目设计供电方案时,就遇到了需要同时提供1.8V、3.3V和5V三种电压的棘手情况。传…

2026/7/6 22:25:18 阅读更多 →
海康威视 SDK V6.1.4.7 Java 二次开发:SpringBoot 集成 3 大核心功能(预览/回放/云台)

海康威视 SDK V6.1.4.7 Java 二次开发:SpringBoot 集成 3 大核心功能(预览/回放/云台)

海康威视SDK V6.1.4.7 Java二次开发:SpringBoot集成3大核心功能实战指南在智能安防领域,海康威视设备占据着重要市场份额。本文将带您从零开始构建一个基于SpringBoot的企业级视频监控管理系统,实现设备实时预览、录像回放和云台控制三大核心…

2026/7/6 22:25:18 阅读更多 →
如何快速获取音乐歌词:一站式歌词下载解决方案

如何快速获取音乐歌词:一站式歌词下载解决方案

如何快速获取音乐歌词:一站式歌词下载解决方案 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为找不到音乐歌词而烦恼吗?163MusicLyrics是一…

2026/7/6 22:21:04 阅读更多 →
直流电机驱动系统优化:TC78H660FTG与PIC18F87J11方案

直流电机驱动系统优化:TC78H660FTG与PIC18F87J11方案

1. 项目背景与核心器件选型 在工业自动化和消费电子领域,直流电机驱动系统的效率优化一直是工程师面临的关键挑战。TC78H660FTG作为东芝新一代H桥驱动器,与Microchip的PIC18F87J11微控制器组合,为解决这一问题提供了创新方案。 1.1 TC78H66…

2026/7/6 22:19:03 阅读更多 →
Flink Web UI未授权访问漏洞修复实战:从原理到Nginx反向代理加固

Flink Web UI未授权访问漏洞修复实战:从原理到Nginx反向代理加固

1. 项目概述:一次真实的Flink安全加固实战最近在梳理线上数据平台的资产时,安全扫描工具突然弹出一个高危告警:Apache Flink Web Dashboard存在未授权访问漏洞。这个告警让我心头一紧,因为这意味着任何能访问到Flink Web UI地址的…

2026/7/6 22:15:01 阅读更多 →
基于Playwright与飞书API构建电商数据自动化采集与同步系统

基于Playwright与飞书API构建电商数据自动化采集与同步系统

1. 项目概述:当飞书多维表格遇上Playwright自动化最近在帮一个做电商的朋友解决一个头疼事:他每天要手动去几个不同的电商平台后台,把各个商品的销量、库存、评价数抄下来,再填到飞书多维表格里做数据分析。这事儿听着就累&#x…

2026/7/6 22:15:01 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻