Ubuntu系统中使用LLVM或者gcc编译Skia源码的方法

Ubuntu系统中使用LLVM或者gcc编译Skia源码的方法

  • 修改日期:2025-05-17
  • 操作系统:Ubuntu 24.04.1 desktop 64位版本(桌面环境:GNOME Wayland)
  • 编译器:LLVM or gcc
  • 说明1:本文档介绍Ubuntu系统中使用LLVM或者gcc编译Skia源码的方法
  • 说明2:该编译Skia源码的方法,是为了适配nim duilib项目使用Skia库,如果用于其他库使用,可能需要修改编译参数
  • 说明3:获取skia源码后,需要更新部分源码(更新方法见后续文档),否则编译无法通过。(使用了一个第三方库:expat)
  • 说明4:操作过程中,假设源码的根目录是/home/develop目录,如果使用其他目录,可替换为实际的目录。

一、准备工作:安装必备的软件

  1. 安装完成系统后,可用升级系统到最新:
    (1)sudo apt update
    (2)sudo apt upgrade -y

  2. 安装依赖的软件

sudo apt install -y gcc g++ gdb make git ninja-build generate-ninja python3 cmake \
                    llvm clang unzip libfontconfig-dev libgl1-mesa-dev \
                    libgles2-mesa-dev libegl1-mesa-dev libvulkan-dev

安装完成后的各个软件版本信息如下:

gcc 已经是最新版 (4:13.2.0-7ubuntu1)。
g++ 已经是最新版 (4:13.2.0-7ubuntu1)。
gdb 已经是最新版 (15.0.50.20240403-0ubuntu1)。
make 已经是最新版 (4.3-4.1build2)。
git 已经是最新版 (1:2.43.0-1ubuntu7.2)。
ninja-build 已经是最新版 (1.11.1-2)。
generate-ninja 已经是最新版 (0.0~git20240221.03d10f1-1)。
python3 已经是最新版 (3.12.3-0ubuntu2)。
cmake 已经是最新版 (3.28.3-1build7)。
llvm 已经是最新版 (1:18.0-59~exp2)。
clang 已经是最新版 (1:18.0-59~exp2)。
unzip 已经是最新版 (6.0-28ubuntu4.1)。
libfontconfig-dev 已经是最新版 (2.15.0-1.1ubuntu2)。
libgl1-mesa-dev 已经是最新版 (24.2.8-1ubuntu1~24.04.1)。
libgles2-mesa-dev 已经是最新版 (24.2.8-1ubuntu1~24.04.1)。
libegl1-mesa-dev 已经是最新版 (24.2.8-1ubuntu1~24.04.1)。
libvulkan-dev 已经是最新版 (1.3.275.0-1build1)。

二、如果只关心结果,直接用下列脚本一键完成所有操作,后续文档就不用再看了。

选定一个工作目录,创建一个脚本build.sh,将下面已经整理好脚本复制进去,保存文件。
然后在控制台,为脚本文件添加可执行权限,最后运行该脚本:

chmod +x build.sh
./build.sh

脚本文件内容如下:

#!/bin/bash

git clone https://github.com/rhett-lee/skia_compile
cp ./skia_compile/linux/build_skia_all_in_one.sh ./
chmod +x ./build_skia_all_in_one.sh
./build_skia_all_in_one.sh

编译时如果获取skia_compile代码失败,可以多重试几次。
编译完成的库文件在工作目录的skia/out子目录中,按编译选项放在相应的子目录。

三、获取skia源码并更新修改代码

  1. 获取skia源码:
#!/bin/bash
mkdir /home/develop  
cd /home/develop
git clone https://github.com/google/skia.git
git checkout 22d94029d2ac36dfac8d631fa0d1b467f0ab45a7
  1. 下载源码和文档,并更新skia的修改代码:
#!/bin/bash
cd /home/develop
git clone https://github.com/rhett-lee/skia_compile
mkdir -p skia_compile/src
cd skia_compile/src
unzip ../skia.2025-05-17.src.zip
cp -rf ./* /home/develop/skia/

更新完成后,可以到skia目录中确认一下是否更新成功

#!/bin/bash
cd /home/develop/skia/
git status

四、编译skia(编译器:LLVM)

  1. 进入skia源码目录:
    > cd /home/develop/skia
  2. 编译skia静态库(llvm.x64.Release)
  • gn gen out/llvm.x64.release --args="target_cpu=\"x64\" cc=\"clang\" cxx=\"clang++\" is_trivial_abi=false is_official_build=true skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_libpng_encode=false skia_use_libpng_decode=false skia_use_zlib=false skia_use_libjpeg_turbo_encode=false skia_use_libjpeg_turbo_decode=false skia_enable_fontmgr_win_gdi=false skia_use_icu=false skia_use_expat=false skia_use_xps=false skia_enable_pdf=false skia_use_wuffs=false skia_enable_svg=true skia_use_expat=true skia_use_system_expat=false is_debug=false extra_cflags=[\"-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\"]"
  • ninja -C out/llvm.x64.release

五、编译skia(编译器:gcc/g++,如果不使用LLVM编译器,也可选择用gcc/g++编译)

  1. 进入skia源码目录:
    > cd /home/develop/skia
  2. 编译skia静态库(gcc.x64.release)
  • gn gen out/gcc.x64.release --args="target_cpu=\"x64\" cc=\"gcc\" cxx=\"g++\" is_trivial_abi=false is_official_build=true skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_libpng_encode=false skia_use_libpng_decode=false skia_use_zlib=false skia_use_libjpeg_turbo_encode=false skia_use_libjpeg_turbo_decode=false skia_enable_fontmgr_win_gdi=false skia_use_icu=false skia_use_expat=false skia_use_xps=false skia_enable_pdf=false skia_use_wuffs=false skia_enable_svg=true skia_use_expat=true skia_use_system_expat=false is_debug=false extra_cflags=[\"-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\"]"
  • ninja -C out/gcc.x64.release

六、资源链接

  1. Skia的编译文档库,点击访问:skia compile
  2. nim duilib的代码库,点击访问:nim duilib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值