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

做网站推广的需要了解哪些知识seo新手教程

做网站推广的需要了解哪些知识,seo新手教程,山西网站制作平台,东莞网站建设制作服务android-ndk开发(12): 获取ndk内置clang的版本详情 1. 概要 android-ndk 从 r21 版本支持 lld 链接器, 从 r22 版本默认使用 lld 链接器。 最近发现 r21 ~ r25 版本的 lld 链接器有 bug, 在生成可执行文件时, 按命令行提示 lld 默认启用 --…

android-ndk开发(12): 获取ndk内置clang的版本详情

1. 概要

android-ndk 从 r21 版本支持 lld 链接器, 从 r22 版本默认使用 lld 链接器。 最近发现 r21 ~ r25 版本的 lld 链接器有 bug, 在生成可执行文件时, 按命令行提示 lld 默认启用 --no-allow-shlib-undefined 选项, 但实际却表现为 --allow-shlib-undefined 选项; 而在 r26 版本中, 这个 bug 被修复了。

也就是说, ndk 里内置的 lld 和 LLVM 官方的 lld 在 major.minor 版本号一致时, 一个链接报错, 一个不报错, 这让人很困惑。

能否找到 ndk 内置的 clang 和 lld 的版本信息? 能否精确找到编译这了 clang 和 lld 的 LLVM 源代码仓库、 commit hash? 因为一旦有了 commit hash, 就可以溯源, 知道为什么会有这个 bug, 以及是否已经修复了这个 bug。

ndk 的 changelog 里没提到这些事, 不过一番尝试, 我找到了答案, 现在记录如下。

2. toolchains/llvm/prebuilt/$HOST_TAG 来源

下载 android-ndk 后会看到 toolchains/llvm/prebuilt/$HOST_TAG 目录, 里面有 clang 和 lld 的二进制文件。 它们是怎么来的?

LLVM 官方仓库: https://github.com/llvm/llvm-project.git

toolchains/llvm-project 仓库: https://android.googlesource.com/toolchain/llvm-project , 是谷歌安卓团队魔改版本的 LLVM 的源代码, 定期会从 LLVM 上游同步 (grafted commit). 它的一个镜像: https://github.com/msft-mirror-aosp/toolchain.llvm-project.git

toolchains/llvm_android 仓库: https://android.googlesource.com/toolchain/llvm_android , 看起来是用于编译 clang 的仓库, README.md 也提到了安卓团队用到的 clang 的来龙去脉。

prebuilts 仓库: https://android.googlesource.com/platform/prebuilts/clang/host , 用于存放编译好的 clang 二进制文件。

ndk 源码仓库: https://android.googlesource.com/platform/ndk, 其中 toolchains/llvm/prebuilt/$HOST_TAG 目录是从 prebuilts 仓库下载的, 也就是编译好的二进制文件。

也就是说, 从上面5个仓库, 最终大体得到了 android-ndk 里的 clang 和 lld 等工具链的二进制文件。 这些来龙去脉, 在 https://android.googlesource.com/toolchain/llvm_android/+/refs/heads/mirror-goog-main-llvm-toolchain-source/README.md 有详细描述。

3. 在 manifest.xml 查看版本详情

以 ndk-r27c 为例:

/Users/zz/soft/android-ndk/r27c/toolchains/llvm/prebuilt/darwin-x86_64/manifest_12470979.xml

  <project path="toolchain/llvm-project" name="toolchain/llvm-project" revision="d8003a456d14a3deb8054cdaa529ffbf02d9b262" />

也就是说: ndk-r27c 的 toolchains/llvm/prebuilt/$HOST_TAG 目录, 对应的 LLVM 源代码, 位于 toolchain/llvm-project 仓库 (https://android.googlesource.com/toolchain/llvm-project), commit 为 d8003a456d14a3deb8054cdaa529ffbf02d9b262。

commit d8003a456d14a3deb8054cdaa529ffbf02d9b262 (msft-mirror-aosp/llvm-r522817)
Merge: 477610d4d0d9 3c92011b600b
Author: Yi Kong <yikong@google.com>
Date:   Mon Feb 19 19:10:28 2024 +0800Merge 3c92011b60 for LLVM update to 522817Test: presubmitChange-Id: If946b1b427b2a2434b8a06b042b8954200aa0c92

这和直接查看 ndk-r27c 里的 clang --version 的输出能对应上:

➜  r27c ./toolchains/llvm/prebuilt/darwin-x86_64/bin/clang --version
Android (12470979, +pgo, -bolt, +lto, -mlgo, based on r522817c) clang version 18.0.3 (https://android.googlesource.com/toolchain/llvm-project d8003a456d14a3deb8054cdaa529ffbf02d9b262)
Target: x86_64-apple-darwin23.6.0
Thread model: posix
InstalledDir: /Users/zz/soft/android-ndk/r27c/./toolchains/llvm/prebuilt/darwin-x86_64/bin

4. 手动下载二进制

既然 android ndk 内置的预编译的 clang 工具链是从 toolchain/llvm-project 仓库编译的, 那么我们也可以直接从这个仓库下载预编译的二进制文件。

汇总各个 ndk release 版本对应的预编译 clang 下载网址:

ndkclangbased onprebuilt linkprebuilt 魔改信息
ndk-r17c6.0.2r316199https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r17/clang-4691093/N/A
ndk-r18b7.0.2r328903https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r18/clang-r328903/N/A
ndk-r19c8.0.2r339409https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r19/clang-r339409b/N/A
ndk-r20b8.0.7r346389chttps://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r20/clang-r346389c/N/A
ndk-r21e9.0.9r365631c3https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r21/clang-r365631c3/N/A
ndk-r22b11.0.5r399163b1https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r22/clang-r399163b1/N/A
ndk-r23c12.0.9r416183c2https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-release-r23/clang-r416183c2/N/A
ndk-r2414.0.1r437112bhttps://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-r24-release/clang-r437112b/clang_source_info.md
ndk-r25c14.0.7r450784d1https://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-r25-release/clang-r450784d1/clang_source_info.md
ndk-r26d17.0.2r487747ehttps://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-r26-release/clang-r487747e/clang_source_info.md
ndk-r27c18.0.3r522817chttps://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-r27-release/clang-r522817c/clang_source_info.md
ndk-r28b19.0.0r530567dhttps://android.googlesource.com/platform/prebuilts/clang/host/windows-x86/+/refs/heads/ndk-r28-release/clang-r530567d/clang_source_info.md

请添加图片描述

这样有什么好处呢? 可以固定 ndk 版本, 但是更换工具链版本, 那么如果交叉编译的表现有差别, 说明是工具链的问题, 比如我遇到的 LLD 链接器行为的差异, 在 ndk-r26b 中, 通过使用 ndk-r25c 的 lld, 发现了不一样的行为。

4. 总结

android-ndk 使用的 clang / lld 等二进制工具, 是谷歌安卓团队魔改、 编译为二进制、 上传到专门的仓库, 再在 ndk 的发行阶段下载打包。

android-ndk 的 manifest.xml 文件记录了对应的 commit hash。 不过, 仍然需要知道这些仓库的完整地址, 才能得到源码、 切换代码到 commit hash、 或者下载编译好的工具链压缩包。

toolchains/llvm-project 提供了详实的 commit 历史记录, 可以用来排查 bug 的来龙去脉, 比如是 LLVM 官方的 bug, 还是安卓团队没有及时从上游同步导致的 bug。

而直接使用 toolchains/llvm-project 仓库编译的二进制文件, 可以让 ndk 使用不同版本的工具链, 可以快速确定是工具链的问题, 还是 ndk 其他文件的问题。


文章转载自:

http://WYjoRB67.pdkht.cn
http://lAyvtaHy.pdkht.cn
http://DKksbQJs.pdkht.cn
http://FPQqPe66.pdkht.cn
http://GESILQlV.pdkht.cn
http://YSQ3iaOj.pdkht.cn
http://PtYHjf2z.pdkht.cn
http://Ib0WU3yq.pdkht.cn
http://CGbkNej3.pdkht.cn
http://CwhNCrMV.pdkht.cn
http://O0GuyBbn.pdkht.cn
http://B4eBYd5V.pdkht.cn
http://agYu77KA.pdkht.cn
http://nfyq19Uv.pdkht.cn
http://p1dHvUyD.pdkht.cn
http://W20s5lMb.pdkht.cn
http://dNa3zlAT.pdkht.cn
http://LMWfFsMD.pdkht.cn
http://zQB5aqxv.pdkht.cn
http://AvA5EHTu.pdkht.cn
http://zniCyroe.pdkht.cn
http://4kHtl9Ps.pdkht.cn
http://s5WAQFgS.pdkht.cn
http://7X2FvGdz.pdkht.cn
http://em0woYky.pdkht.cn
http://N5FFIAPm.pdkht.cn
http://dH825RUj.pdkht.cn
http://m2U2f6Rd.pdkht.cn
http://TGmWxVR6.pdkht.cn
http://K9xInnAh.pdkht.cn
http://www.dtcms.com/wzjs/621159.html

相关文章:

  • 响应式网站模板代码仿uehtml WordPress
  • 怎么做网站推广六安网站如何做延迟加载
  • 淘宝网站制作多少钱建设网站犀牛云
  • notepad做网站杭州高端网站设计
  • 上海网站建设设计公司排名wordpress rss 爬取
  • 自动建站网站系统域名苏州外贸网站建设制作方案
  • 众筹网站建设公司tp框架网站开发参考文献
  • 做网站补贴有没有个人做网站的
  • 茶网站建设方案php做听歌网站
  • 网站建设问卷调查wordpress查看访问者ip
  • 高校网站建设的优势和不足泰安网站建设个人工作室
  • 怎样做 网站做seowordpress 4.2 emoji
  • 网站如何做的有特色地方域名注册
  • 网站后台管理模板下载做网站图片自动切换
  • 移动网站开发技术网站关键字可以做几个
  • 淘宝推广网站建设宜兴开发区人才网
  • 手机版网站模板 免费网站审核要多久
  • 网站横幅背景图片宁波市网站建设公司
  • 房产智能建站系统重庆十大装饰公司排名
  • 公司网站建设的系统功能需求分析wordpress git编辑器
  • 做网站哪一家比较好泉州网站建设是什么意思
  • 做网站推广的联系方式wordpress ftp 主机名
  • 盐亭县建设局网站网站建设公司管理流程
  • 阿凡达营销网站高职教育双高建设网站
  • 如何做logo模板下载网站为了同学都能访问网站如何做
  • 安阳网站优化wordpress 自己做页面
  • 朝阳网站开发公司石家庄建设集团网站
  • 小企业网站建设包含哪些东莞网站建设那家好
  • 怎么攻击网站吗flatsome wordpress
  • 如何用家庭电脑做网站seo网络优化师就业前景