首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Erlang/OTP 树莓派 3 交叉编译实战:基于 crosstool-ng 工具链与 otp_build 的完整流程
📅 2026/9/23 13:24:08
✍️ 爱科研究院
👁 阅读 3,247
编程语言语言运行时标准库编译器并发编程【免费下载链接】otpErlang/OTP项目地址https://gitcode.com/gh_mirrors/ot/otp点击查看免费下载本文以 Erlang/OTP 官方 HOWTO 文档 HOWTO/INSTALL-RASPBERRYPI3.md 为骨架系统讲解如何在 macOSMojave宿主机上为 Raspberry Pi 3 构建交叉编译工具链、交叉编译第三方依赖zlib / openssl / ncurses、填充 sysroot并最终通过otp_build配合仓库自带的 xcomp 交叉配置产出树莓派 3 可运行的 Erlang/OTP 发布包。读完本文你将掌握一套可复现的工具链 → 依赖 → sysroot → OTP 交叉编译四段式流程并能读懂仓库中 xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf 等交叉配置文件的每个变量含义。一、背景与适用场景当你手上有一台树莓派 3或同类 armv7l/armv8 32 位 Linux 目标而官方尚未为它提供最新 OTP 版本的二进制包时交叉编译是让最新 OTP或 master 分支跑起来的最直接途径。本文面向的是在 macOS 上为树莓派 3 交叉编译 Erlang/OTP这一场景原文基于 macOS Mojave 10.14.3 与 Raspberry Pi 3 Model B Rev 1.2 验证。整个过程耗时数小时核心瓶颈在于第一步从零构建交叉编译工具链。工具链就绪后交叉编译所有库依赖、创建 sysroot 文件系统最后用新工具链和 sysroot 交叉编译 Erlang/OTP。由于涉及大量第三方软件包的版本组合实际执行中可能遇到文档未覆盖的报错需要自行修复——正如原文作者所言构建工具链并不是一件有趣的事。动手之前建议先通读仓库中的两份配套文档HOWTO/INSTALL.mdErlang/OTP 的常规构建与安装指南介绍configure/make与otp_build两条构建路线HOWTO/INSTALL-CROSS.mdErlang/OTP 交叉编译的系统性说明包含全部交叉配置变量定义。已测试的配置项目版本宿主机操作系统macOS Mojave 10.14.3目标硬件Raspberry Pi 3 Model B Rev 1.2工具链生成器Crosstools-NG 1.23.0_3build x86_64-apple-darwin18.2.0 host x86_64-apple-darwin18.2.0 target armv8-rpi3-linux-gnueabihf提示树莓派上的/proc/device/tree/model文件包含机型信息可用于确认目标硬件型号。二、准备阶段安装 crosstool-ng 与创建磁盘映像安装 crosstool-ng步骤 1-2macOS 下通过 Homebrew 安装 crosstool-ng同时安装其脚本依赖$ brew install crosstool-ng $ brew install grep --default-names # crosstools-ng 脚本需要 $ brew install md5sha1sum # crosstools-ng populate 脚本需要安装后需要为工具链脚本补上可执行权限不同版本路径略有差异$ chmod 744 /usr/local/Cellar/crosstool-ng/1.23.0_3/lib/crosstool-ng-1.23.0/scripts/crosstool-NG.sh创建大小写敏感的磁盘映像步骤 3在 Disk Utility 中通过File - New Image - Blank Image...创建两个大小写敏感的磁盘映像格式选Mac OS Extended (Case-sensitive, Journaled)/Volumes/xtools-build-env 15 GB /Volumes/xtools 500 MB第一个映像15 GB存放构建工具链期间的所有源码与目标文件第二个映像500 MB存放编译好的工具链。大小写敏感是 GNU 工具链源码构建的硬性要求源码树中存在仅大小写不同的同名文件这一步不能省。三、构建交叉工具链The Long Road环境设置步骤 4$ ulimit -n 1024提高文件描述符上限避免多进程并行编译时Too many open files。检查目标系统步骤 5在树莓派上记录目标系统的关键组件版本工具链中各组件版本必须与目标系统匹配$ uname -a Linux raspberrypi 4.9.35-v7 #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux $ ld -v GNU ld (GNU Binutils for Raspbian) 2.25 $ ldd --version ldd (Debian GLIBC 2.19-18deb8u10) 2.19务必使用目标系统上的实际版本例如本例中目标系统是 Debian 8 衍生系统GLIBC 2.19则工具链中的 glibc 也应对应选择 2.19。OSDev Wiki 的 Cross-Compiler Successful Builds 页面记录了各目标组合的成功构建版本矩阵可作为选型参考。配置 crosstool-ng步骤 6$ cd /Volumes/xtools-build-env $ ct-ng armv8-rpi3-linux-gnueabihf $ ct-ng menuconfigct-ng armv8-rpi3-linux-gnueabihf会载入与 OTP 仓库中 xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf 对应目标三元组triplet相同的预置样本随后用menuconfig逐项微调。Path and misc options → crosstool-NG behavior步骤 7[*] Use obsolete features [*] Debug crosstool-NG [ ] Pause between every steps [*] Save intermediate steps [*] gzip saved states [*] Interactive shell on failed commands关键点勾选Save intermediate steps保存中间步骤与Interactive shell on failed commands失败时进入交互 shell。这样当某个构建步骤失败时可以修复问题后从断点继续而不必从头重来。Paths步骤 8Local tarballs directory/Volumes/xtools-build-env/srcWorking directory/Volumes/xtools-build-env/.buildPrefix directory/Volumes/xtools/${CT_TARGET}Extracting步骤 9勾选[*] Stop after extracting tarballs让构建过程在解压完所有源码包后立即停止。这在需要在正式构建前手工修补源码已知问题时非常有用。Operating System步骤 10选择Linux kernel version (4.9.20)与目标系统内核 4.9.35 同系列。Binary utilities步骤 11选择bintutils version (2.28)。C-library步骤 12选择glibc version (2.19 (OBSOLETE))——注意 crosstool-ng 会把 2.19 标记为 OBSOLETE过时但这正对应目标树莓派系统上的 GLIBC 2.19交叉编译产物才能与目标系统动态库 ABI 兼容。ct-ng 常用命令步进式构建交叉工具链构建是多步骤流水线crosstool-ng 支持按步执行、断点续跑列出所有构建步骤$ ct-ng list-steps Available build steps, in order: - companion_tools_for_build - companion_libs_for_build - binutils_for_build - companion_tools_for_host - companion_libs_for_host - binutils_for_host - cc_core_pass_1 - kernel_headers - libc_start_files - cc_core_pass_2 - libc - cc_for_build - cc_for_host - libc_post_cc - companion_libs_for_target - binutils_for_target - debug - test_suite - finish只重跑单个步骤以companion_libs_for_host为例$ ct-ng companion_libs_for_host从某个步骤开始向后执行后缀$ ct-ng companion_libs_for_host从开头执行到某个步骤为止前缀$ ct-ng companion_libs_for_host正式构建步骤 13-17首次构建会按配置在解压 tarball 后停下$ ct-ng build针对已知源码问题打补丁——本例中 gettext 0.19.8.1 需要重新生成 autoconf 脚本$ pushd .build/src/gettext-0.19.8.1/ $ autoreconf $ popd再次进入 menuconfig取消解压后停止$ ct-ng menuconfig取消勾选[ ] Stop after extracting tarballs从断点继续构建$ ct-ng build构建完成后将工具链 bin 目录加入 PATH$ export PATH/Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin:$PATH验证工具链步骤 18$ cat test.c $ int main() { printf(Hello, world!\n); return 0; } CtrlD $ armv8-rpi3-linux-gnueabihf-gcc -o test test.c如果armv8-rpi3-linux-gnueabihf-gcc能正常编译出可执行文件说明工具链可用file test应显示 ARM 架构。注意 test.c 中需包含stdio.h头文件才能通过编译原文此处示例省略了 include。四、交叉编译 OTP 第三方依赖步骤 19-22工具链就绪后交叉编译 Erlang/OTP 运行时依赖的第三方库。建立两个目录$ mkdir local # prefix 目录安装交叉编译的依赖 $ mkdir 3pps # OTP 依赖源码目录 $ cd 3ppszlib步骤 20$ wget http://zlib.net/zlib-1.2.13.tar.gz $ tar xf zlib-1.2.13.tar.gz $ pushd zlib-1.2.13 $ CHOSTarmv8-rpi3-linux-gnueabihf ./configure --prefix/Volumes/xtools-build-env/local $ make $ make install $ popdCHOST环境变量让 zlib 的 configure 使用交叉编译工具前缀armv8-rpi3-linux-gnueabihf-产物安装到统一 prefix 目录/Volumes/xtools-build-env/local。openssl步骤 21$ wget http://openssl.org/source/openssl-1.1.1b.tar.gz $ tar xf openssl-1.1.1b.tar.gz $ pushd openssl-1.1.1b $ ./Configure linux-generic32 --prefix/Volumes/xtools-build-env/local \ --openssldir/Volumes/xtools-build-env/local/openssl \ --cross-compile-prefixarmv8-rpi3-linux-gnueabihf- $ make $ make install $ popdlinux-generic32是 OpenSSL 针对 32 位 ARM Linux 的通用配置目标--cross-compile-prefix指定工具链前缀。目标系统上必须存在与之兼容的 OpenSSL 运行库否则 OTP 的crypto、ssl应用在树莓派上无法加载参见 HOWTO/INSTALL.md 中--with-ssl/--without-ssl相关说明。ncurses步骤 22ncurses 的交叉编译最繁琐需要打补丁并显式给出 build/host 三元组$ wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz $ tar xf ncurses-5.9.tar.gz $ pushd ncurses-5.9 $ wget https://gist.githubusercontent.com/peterdmv/1068b2f9e1fec6e1330ad62ed87461ad/\ raw/065597b63654ed6a9f28d02fdfbca844413847ad/ncurses-5.9.patch $ patch -p0 ncurses-5.9.patch $ ./configure --buildx86_64-apple-darwin18.2.0 --hostarmv8-rpi3-linux-gnueabihf \ --without-ada --without-cxx --without-cxx-binding --without-manpages \ --without-progs --without-tests --prefix/usr --libdir/lib \ --with-build-ccgcc -D_GNU_SOURCE --with-shared $ make $ make DESTDIR/Volumes/xtools-build-env/local install $ popd参数解读--buildx86_64-apple-darwin18.2.0构建机macOS三元组与第三节中的 build 值一致--hostarmv8-rpi3-linux-gnueabihf目标三元组--without-ada/cxx/...裁剪不需要的语言绑定与工具程序减少交叉编译面--prefix/usr --libdir/lib模拟目标系统布局Raspbian 将 ncurses 库放在/lib--with-build-ccgcc -D_GNU_SOURCE构建工具使用宿主机 gcc避免引导阶段循环依赖--with-shared生成共享库make DESTDIR... install将产物安装到暂存目录便于下一步 populate 进 sysroot。五、填充 sysroot步骤 23-24将上一节安装在/Volumes/xtools-build-env/local下的依赖以及目标系统的运行时文件合并成 sysroot$ chmod 755 /Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin $ chmod 755 /Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin/armv8-rpi3-linux-gnueabihf-populate $ gsed -i s/sed/gsed/g \ /Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin/armv8-rpi3-linux-gnueabihf-populate $ chmod 555 /Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin $ chmod 555 /Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin/armv8-rpi3-linux-gnueabihf-populate第一组命令解决两个 macOS 特有问题bin目录及 populate 脚本需要可执行位populate 脚本内部硬编码调用 BSD 版sed需替换为 GNU sedgsed即前面安装的brew install grep --default-names同批安装的工具因此用gsed -i将脚本中的sed全部替换为gsed。执行 populate 并导出 sysroot 环境变量$ armv8-rpi3-linux-gnueabihf-populate -s /Volumes/xtools-build-env/local \ -d /Volumes/xtools-build-env/sysroot $ export RPI_SYSROOT/Volumes/xtools-build-env/sysroot-s指定源目录-d指定目标 sysroot 目录。RPI_SYSROOT将被后面的 xcomp 配置文件引用。六、交叉编译 Erlang/OTP步骤 25回到 OTP 源码树顶层即$ERL_TOP依次执行三步$ ./otp_build configure --xcomp-conf./xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf $ ./otp_build boot -a $ ./otp_build release -a /Volumes/xtools-build-env/otp_22.0三步分别对应configure传入交叉编译配置文件。otp_build脚本会在内部加载该文件参见 otp_build 脚本中对--xcomp-conf*参数的处理逻辑读取文件、source其中变量、将erl_xcomp_build/erl_xcomp_host转换为--build/--host传给 configure其余变量经env_to_config_flags转成 configure 参数并同时为构建机 bootstrap 系统和交叉目标系统生成两份配置boot -a先为构建机构建一个最小 bootstrap Erlang 系统用于编译 Erlang 源码再对目标系统执行交叉构建。-a表示构建全部应用release -a将交叉构建产物组装为发布目录等价于make release的otp_build版本。之后还需要在宿主机或目标机上手工执行Install脚本完成安装详见 HOWTO/INSTALL-CROSS.md 的 Installing Manually 一节。关于otp_build与configure/make两条路线的差异HOWTO/INSTALL-CROSS.md 明确指出otp_build步骤更少但灵活性较低且其默认配置与直接运行configure不同例如目前会默认追加--disable-dynamic-ssl-lib。若改用configure直接交叉编译则不能使用--xcomp-conf参数只能以--hostHOST --buildBUILD VARVALUE形式传参且wx应用在交叉编译时会被自动禁用。七、深入解析仓库自带的树莓派 3 交叉配置文件仓库中 xcomp/erl-xcomp-armv8-rpi3-linux-gnueabihf.conf 正是第六节使用的配置文件作者 Péter Dimitrov验证环境 macOS High Sierra 10.13.2 Raspberry Pi 3 Model B Rev 1.2。它也是第三节 crosstool-ng 目标三元组armv8-rpi3-linux-gnueabihf的直接来源。完整内容如下## -- Variables for otp_build Only ------------------------------------------- erl_xcomp_buildguess # 构建机三元组guess 自动探测 erl_xcomp_hostarmv8-rpi3-linux-gnueabihf # 目标三元组 #erl_xcomp_configure_flags # 额外 configure 参数 ## -- Cross Compiler and Other Tools ------------------------------------------- CCarmv8-rpi3-linux-gnueabihf-gcc #CFLAGS #STATIC_CFLAGS #CFLAG_RUNTIME_LIBRARY_PATH CPParmv8-rpi3-linux-gnueabihf-cpp #CPPFLAGS CXXarmv8-rpi3-linux-gnueabihf-g #CXXFLAGS LDarmv8-rpi3-linux-gnueabihf-ld LDFLAGS-L$RPI_SYSROOT/lib # 链接时查找 sysroot 库 #LIBS ## -- *D*ynamic *E*rlang *D*river Linking -- (DED_LD / DED_LDFLAGS / ...) ## -- Large File Support -- (LFS_CFLAGS / LFS_LDFLAGS / LFS_LIBS) ## -- Other Tools -- RANLIBarmv8-rpi3-linux-gnueabihf-ranlib ARarmv8-rpi3-linux-gnueabihf-ar #GETCONF ## -- Cross System Root Locations ---------------------------------------------- erl_xcomp_sysroot$RPI_SYSROOT # 交叉编译环境系统根 #erl_xcomp_isysroot # include 系统根默认等于 sysroot ## -- Optional Feature, and Bug Tests ------------------------------------------ #erl_xcomp_after_morecore_hook #erl_xcomp_bigendian #erl_xcomp_double_middle_endian #erl_xcomp_clock_gettime_cpu_time #erl_xcomp_getaddrinfo #erl_xcomp_gethrvtime_procfs_ioctl #erl_xcomp_dlsym_brk_wrappers #erl_xcomp_kqueue #erl_xcomp_linux_clock_gettime_correction #erl_xcomp_linux_nptl #erl_xcomp_linux_usable_sigaltstack #erl_xcomp_linux_usable_sigusrx #erl_xcomp_poll #erl_xcomp_putenv_copy #erl_xcomp_reliable_fpe #erl_xcomp_posix_memalign #erl_xcomp_code_model_small核心要点工具链变量由于 crosstool-ng 生成的工具全部带armv8-rpi3-linux-gnueabihf-前缀且该前缀与erl_xcomp_host一致按 HOWTO/INSTALL-CROSS.md 的说明CC/CPP/CXX/LD/AR/RANLIB本可以省略本文件显式写出属于显式声明的稳妥做法。LDFLAGS 引用$RPI_SYSROOT链接第三方库时从 sysroot 的/lib目录查找——这正是第五节export RPI_SYSROOT...的意义所在也解释了为何依赖必须安装在--libdir/lib布局下。erl_xcomp_sysrootcrypto、odbc、ssh、ssl四个应用必须依赖 sysroot 才能构建未设置 sysroot 时这些应用会被跳过详见 HOWTO/INSTALL-CROSS.md 的 Cross System Root Locations 一节。本文件将 sysroot 指向 populate 出的目录。DED动态 Erlang 驱动与 LFS大文件支持两组变量要么全部设置、要么全部不设置保持默认即可。八、交叉配置变量速查哪些可以不用管交叉配置文件里不能定义任意变量只有 xcomp/erl-xcomp-vars.sh 中登记的那批erl_xcomp_*变量能保证在整个 configure 过程中全局可见其余变量需以 configure 参数或环境变量方式传入。完整清单为erl_xcomp_sysroot、erl_xcomp_isysroot、erl_xcomp_bigendian、erl_xcomp_double_middle_endian、erl_xcomp_linux_clock_gettime_correction、erl_xcomp_linux_nptl、erl_xcomp_linux_usable_sigusrx、erl_xcomp_linux_usable_sigaltstack、erl_xcomp_poll、erl_xcomp_kqueue、erl_xcomp_putenv_copy、erl_xcomp_reliable_fpe、erl_xcomp_getaddrinfo、erl_xcomp_gethrvtime_procfs_ioctl、erl_xcomp_clock_gettime_cpu_time、erl_xcomp_after_morecore_hook、erl_xcomp_dlsym_brk_wrappers、erl_xcomp_posix_memalign、erl_xcomp_code_model_small。其中可选特性与缺陷测试这一类第八节末尾的大段注释在交叉编译时无法自动探测configure 会为使用默认值的变量打印警告。通常不需要设置它们但若设置错误可能导致难以察觉的运行时错误务必确认目标系统行为后再修改。几个值得关注的默认值来自 HOWTO/INSTALL-CROSS.mderl_xcomp_linux_nptlLinux 默认yes要求目标系统具备 NPTL 线程库内核通常 ≥ 2.6erl_xcomp_linux_clock_gettime_correctionLinux 默认yes要求clock_gettime(CLOCK_MONOTONIC, _)可用erl_xcomp_bigendian无默认值若 configure 无法自动判断字节序将直接失败需手工指定本例目标为小端 ARM可设为noerl_xcomp_pollDarwin/macOS 默认no其余平台默认yes目标系统需有可处理设备文件的poll()实现erl_xcomp_kqueue默认no若为no且目标系统既无epoll()也无/dev/poll内核 poll 特性会被禁用。更多示例可参考仓库中的 xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf 与 xcomp/erl-xcomp.conf.template后者收录全部可用变量及注释。九、交叉编译后的收尾测试与部署交叉构建产出的发布目录还需要在目标机上完成Install流程。根据 HOWTO/INSTALL-CROSS.md可将整个发布目录打包拷贝到树莓派进入$RELEASE_DIR后执行$ cd ABSOLUTE_INSTALL_DIR_ON_TARGET $ ./Install [-minimal|-sasl] ABSOLUTE_INSTALL_DIR_ON_TARGET-minimal仅启动kernel与stdlib的最小安装make install的默认行为-sasl额外启动sasl应用若在构建机上运行Install则需要加-cross参数。交叉编译系统的测试遵循 HOWTO/INSTALL-CROSS.md 的 Testing the cross compiled system 流程先在构建机make release_tests或./otp_build tests产出测试套件用ts:install([{xcomp,FILE}])交叉编译测试用例将$ERL_TOP/release/tests整体拷贝到目标机最后在目标机运行$ erl -s ts install -s ts run all_tests -s init stop十、总结四段式流程与常见坑位阶段关键产物核心命令1. 工具链/Volumes/xtools/${CT_TARGET}下的交叉编译器ct-ng build配合 list-steps 断点续跑2. 依赖/Volumes/xtools-build-env/local下的 zlib/openssl/ncurses各库的 configure make install3. sysroot/Volumes/xtools-build-env/sysrootarmv8-rpi3-linux-gnueabihf-populate -s ... -d ...4. OTP/Volumes/xtools-build-env/otp_22.0发布目录otp_build configure/boot/release本文中的命令与配置均以仓库当前文档 HOWTO/INSTALL-RASPBERRYPI3.md 为准。实操中最大的不确定性来自版本组合工具链组件版本必须对齐目标系统glibc、binutils、内核头文件第三方库版本要随 OTP 发布周期调整例如 OpenSSL 1.1.1b、zlib 1.2.13 均是当时测试的版本并注意 macOS 特有的坑大小写敏感磁盘映像、GNU sed 替换、populate 脚本权限。只要守住工具链 → 依赖 → sysroot → OTP这条主线每个阶段的产物都可以独立验证遇到问题也就能准确定位到具体环节。赞分享编程语言语言运行时标准库编译器并发编程【免费下载链接】otpErlang/OTP项目地址https://gitcode.com/gh_mirrors/ot/otp点击查看免费下载相关推荐Erlang/OTP 交叉编译完全指南基于 otp_build 与 configure 的跨平台构建实战Erlang/OTP 交叉编译完全指南基于 otp_build 与 configure 的跨平台构建实战 本篇指南以 Erlang/OTP 官方交叉编译文档编程语言语言运行时标准库编译器并发编程Metabase 用户预置User Provisioning with SCIM配置指南SCIM 2.0 端点、Token 管理与 Okta/Entra ID 集成Metabase 用户预置User Provisioning with SCIM配置指南SCIM 2.0 端点、Token 管理与 Okta/Entra编程语言语言运行时标准库编译器并发编程在树莓派上构建 Apache MXNet原生编译与交叉编译全流程指南在树莓派上构建 Apache MXNet原生编译与交叉编译全流程指南 MXNet 官方支持在 ARM 设备如树莓派上运行本文基于仓库中的 树莓派构建指南深度学习人工智能机器学习分布式训练上一篇Soccer CLI 指南足球黑客的命令行工具下一篇如何完整备份微信聊天记录3步实现数据永久保存的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/23 13:24:08
PHPStan 错误 `parameter.notByRef` 详解:子类参数未按引用传递,如何修复并理解其原理
2026/9/23 13:19:08
USB-C CC引脚原理与实测:从电阻检测到PD协商全链路解析
2026/9/23 13:19:08
搞懂 mtsh 只需 5 步,告别报错与晋升卡点
2026/9/23 14:19:15
博文写作 prompt 生产系统:六个组件让技术文不空泛可落地
2026/9/23 14:19:15
超表面设计:从仿真到工程实践的关键技术与应用
2026/9/23 14:19:15
uniapp在线更新实战:整包更新与资源热更新全解析
2026/9/23 14:19:15
Coil 3 ImageRequest 完全指南:构建、执行与配置图片加载请求
2026/9/23 14:19:15
从零搭建DOTA2信息站:Astro+Cloudflare Workers技术选型与落地实录
2026/9/23 14:14:13
PCD表面元器件缺陷检测数据集:YOLO格式上手与训练避坑指南
2026/9/23 0:02:40
3个致命坑:VIP免费文档性能优化最佳实践
2026/9/23 0:02:40
微信朋友圈显示地址从入门到实战
2026/9/23 0:02:40
秘书奶好大好紧快叫的视频源码解析
2026/9/22 8:19:09
深入解析Transformer多头注意力机制与工程优化
2026/9/22 6:46:54
OpenClaw 的 Skills 跑学习任务,模型通道改到 TaoToken 通道行不行?
2026/9/22 13:44:23
ChatGPT报错Oops, an error occurred! 全链路排查指南