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

macOS系统中使用clang/clang++编译Skia源码的方法

macOS系统中使用clang/clang++编译Skia源码的方法

  • 修改日期:2025-11-01
  • 操作系统:macOS
  • 编译器:clang/clang++
  • 说明1:本文档介绍macOS系统中使用clang/clang++编译Skia源码的方法
  • 说明2:该编译Skia源码的方法,是为了适配nim duilib项目使用Skia库,如果用于其他库使用,可能需要修改编译参数
  • 说明3:获取skia源码后,需要更新部分源码(更新方法见后续文档),否则编译无法通过。(使用了一个第三方库:expat)
  • 说明4:操作过程中,假设源码的根目录是~/develop目录,如果使用其他目录,可替换为实际的目录。

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

  1. 安装完成系统后,需要做的工作:

安装Xcode命令行工具

xcode-select --install

验证安装:

clang++ --version

安装Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

如果失败,可以查找其他源来安装。
更新Homebrew:

brew update

系统已经自带,无需安装的软件

git make unzip python3

安装cmake

brew install cmake

安装ninja

brew install ninja

安装gn

需要从源码编译gn

mkdir ~/develop
cd ~/develop
git clone https://github.com/timniederhausen/gn
cd gn
python3 build/gen.py
ninja -C out
sudo cp out/gn /usr/local/bin/
gn --version

二、使用脚本自动编译(推荐)

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

chmod +x build.sh
./build.sh

脚本文件内容如下:

#!/bin/bashgit clone https://github.com/rhett-lee/skia_compile
chmod +x ./skia_compile/macos/build_skia_all_in_one.sh
./skia_compile/macos/build_skia_all_in_one.sh

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

三、手动编译过程

第1步:获取skia源码并更新修改代码

  1. 获取skia源码:
#!/bin/bash  
cd ~/develop
git clone https://github.com/google/skia.git
git -C ./skia checkout c5cd862d6fa511be244f7c2db1fe05563ff8fc72
  1. 下载源码和文档,并更新skia的修改代码:
#!/bin/bash
cd ~/develop
git clone https://github.com/rhett-lee/skia_compile
unzip -o ./skia_compile/skia.2025-11-01.src.zip -d ./skia/

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

#!/bin/bash
cd ~/develop/
git -C ./skia status

第2步:编译skia(编译器:LLVM)

  1. 进入skia源码目录:
    > cd ~/develop/skia
  2. 编译skia静态库(llvm.arm64.Release)
  • gn gen out/llvm.arm64.release --args="target_cpu=\"arm64\" 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.arm64.release
  1. 编译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

四、资源链接

  1. Skia的编译文档库,点击访问:skia compile
  2. nim duilib的代码库,点击访问:nim duilib
http://www.dtcms.com/a/614265.html

相关文章:

  • 建设银行的网站怎么打开桂林建网站哪家好
  • 在线教育网站策划方案苏州做网站最好公司有哪些
  • 网站制作需要网站制作wordpress内容付费模板
  • OpenCV(二十六):高斯滤波
  • LeetCode Hot100 接雨水
  • C#22、什么是IEnumerable
  • 网站建立数据库手机ftp传网站文件在哪里
  • Flume Kafka源与汇的topic覆盖问题解决
  • 基于卷积神经网络的手写数字识别
  • 旅游网站建设ppt模板下载宁国新站seo
  • 助贷获客系统哈尔滨网站推广优化公司
  • 前端国际化解决方案,i18n库推荐
  • Intellij idea 注释模版
  • C语言指针的详细讲解应用(江科大)
  • 哪方面的网站小程序推广方案
  • 张家口全景网站建设百度新闻官网首页
  • 轻量不卡顿!7-Zip 清爽压缩软件:高压缩比
  • 易语言开发编译器 | 高效简洁的开发工具,让编程更轻松
  • Android中的后台任务最佳实践
  • 自适应企业网站模板重庆网站建站一站式服务
  • 关于C语言的电子书,有需要的关注联系我
  • MinGW-w64 工具链(GCC 编译器) 的不同构建版本的区别
  • 【C++】 set/multiset底层原理与逻辑详解
  • 易语言exe反编译器:深度解析与使用指南
  • 19.优先级队列容器priority_queue
  • 做盗版视频网站成本多少钱低调与华丽wordpress下载
  • JAVA EE初阶 6: 网络编程套接字
  • 旅行网站建设方案策划书wordpress一键优化
  • 自己动手写深度学习框架(优化深度学习框架)
  • C语言编译过程五个步骤 | 深入解析编译过程中的关键环节