Repository navigation
mcpp 在 Android Termux(Bionic)上的编译困难问题 #143
Description
Activity
部分cmake版本较低,无法编译module,可能需要更高版本的cmake,或者换用make会拥有更好的跨平台编译能力。
谢谢回复。不过我用的 CMake 是 4.3.0,版本其实够高了。换 Make 可能也解决不了,因为问题出在更底层。我在 Termux 里直接用 clang++ -std=c++23 编译 import std; 就报错 module 'std' not found,根本还没用到 CMake 或 Make。
我检查了一下termux的../usr/下的文件夹,里面没有发现std.cppm 或者std.cc等文件,无法手动编译std module。也许从llvm对应的版本中下载std.cppm std.compat.cppm然后手动编译,并且在使用cmake编译时链接这个moudle或许可以解决这个问题。
我按照你的建议尝试了以下步骤:
-
从 LLVM 21.1.8 源码包中查找 std.cppm
- 下载了 libcxx-21.1.8.src.tar.xz
- 解压后发现源码包中**没有 .cppm文件
- LLVM 的 libc++ 模块文件需要通过 CMake 构建生成模板,不是直接提供的
-
尝试用 -fmodules间接使用标准库:
- 执行 clang++ -std=c++23 -stdlib=libc++ -fmodules test.cpp
- 报错:Bionic 头文件与模块系统冲突(sigcontext sigaction重复定义)
- 这是 Android Bionic libc 与 LLVM 模块化的兼容性问题
-
尝试降级为传统 #include模式: - 修改了 src/main.cpp 中的 import std; 为 #include
- 但项目中还有 30+ 个 .cppm模块文件依赖 import std; 和 import mcpp.xxx;
- 强制禁用模块化(-fno-modules)后,export module import关键字导致解析错误
-
我初步看怎么出个 aarch64 版本的mcpp 到时候贴上面 你可以试一试
对应的源码路径在libcxx/modules/std.cppm.in,你可以试着把整个libcxx文件夹clone到本地,然后手动编译
对应的源码路径在libcxx/modules/std.cppm.in,你可以试着把整个libcxx文件夹clone到本地,然后手动编译
出mcpp的aarch64其实容易, 但是要可用的话需要 对应工具链和mcpp一起适配 可能走 musl 这套路径短点 后面我试一下
- added a parent issue
on Jun 22, 2026 问题根因似乎是 Android Bionic libc 与 LLVM C++ 模块化不兼容,而非 aarch64 Linux 通用问题。在标准 ARM64 Linux(glibc)上应该大概可以正常编译
所以我把issue标题改了一下,这样更恰当一点
- changed the title
[-]mcpp 在 aarch64-linux 上的编译困难问题[/-][+]mcpp 在 Android Termux(Bionic)上的编译困难问题[/+]on Jun 23, 2026 目前你可以先安装 xlings 工具, 然后通过xlings 安装 mcpp 工具本身是可以运行的 但是编译器 目前有点问题, 你要是有兴趣可以 帮忙排查排查 (目前 mcpp 已经有 aarch64版本了)
xlings install mcpp -y mcpp --version mcpp new hello cd hello && mcpp build # 这里目前目前期望走 musl gcc 但是 系统调用的时候会出问题 目前排查中android 13 好像会拦截一些系统调用导致一些问题
- 交叉(构建 xlings/mcpp) │ 1.2.5 │ 不调 │ ✅ │
- 原生包(Termux 上编译) │ 1.2.6 │ 启动就调 │ ❌ SIGSYS │
musl 1.2.6 改成启动时(主线程)就注册 robust list → 调 set_robust_list → Android 13 app 沙盒 seccomp 把它 TRAP 成 SIGSYS。musl 1.2.5 不调,所以 xlings(1.2.5 链接)能跑
我按照建议通过 xlings 安装了 mcpp,目前进展如下:
成功部分
- 通过
xlings install mcpp -y成功安装 mcpp v0.0.59 - 安装了 aarch64 版本的 xlings(v0.4.58)作为引导工具
- 设置
MCPP_VENDORED_XLINGS环境变量后,mcpp 可以正常启动 - mcpp 自动下载并安装了 patchelf、ninja 等依赖
- 正在自动安装 gcc@15.1.0-musl 工具链(下载中)
当前状态
- 工具链安装正在进行
- 因为工具链较大,我感觉还得下一会
待验证
- 等工具链安装完成后,我会试试能不能正常编译
环境信息
- 设备:Android Termux (aarch64)
- xlings:v0.4.58 (从 Release 下载)
- mcpp:v0.0.59 (通过 xlings 安装)
- 工具链:正在安装 gcc@15.1.0-musl
- 通过
重大突破!在 Android Termux 上成功编译并运行了 mcpp 项目!
测试环境
- 设备:Android Termux (aarch64)
- 引导工具:xlings v0.4.58
- mcpp 版本:v0.0.59
- 工具链:musl-gcc(通过 mcpp 自动下载)
测试结果
编译后的程序成功运行,输出:
~/.../87f75a86194145d1/bin $ ./test Hello from test! Built with import std + std::println on modular C++23. ~/.../87f75a86194145d1/bin $关键意义
import std在 Android 上成功编译 —— 通过 musl 工具链绕过了 Bionic 的限制std::println正常工作 —— C++23 特性完整支持- mcpp 的隔离工具链机制成功生效
后续建议
- 或许可以考虑在 README 中增加 "Android/Termux 通过 xlings 安装" 的指南
mcpp 在 Android Termux 上成功自举!
验证内容
- 使用 xlings 安装的 mcpp v0.0.59 作为引导
- mcpp 自动下载了
aarch64-linux-musl工具链(GCC 15.1.0) - 用这套工具链编译了 mcpp 源码
- 成功生成 mcpp v0.0.60 二进制
~/tmp/mcpp $ mcpp build Downloading mcpplibs.cmdline v0.0.1 Downloading mcpplibs:mcpplibs.cmdline@0.0.1 Inferred sources [src/**/*.{cppm,cpp,cc,c}] Inferred target mcpp (bin from src/main.cpp) Compiling mcpp v0.0.60 (.) Compiling mcpplibs.cmdline v0.0.1 Finished release [optimized] in 230.37s ~/tmp/mcpp $
验证结果
# 自编译的 mcpp 可以正常运行 ./mcpp --version mcpp v0.0.60 — modern C++23 build toolReacted by SPeak第一运行mcpp有没有卡很长时间, 我的Termux上总是网络请求卡住, 不知道是我的环境的问题还是工具的问题
rm .mcpp -rf mcpp new hhh cd hhh mcpp build --verbose第一次初始化环境 大概多长时间 有没有卡的地方
网络环境:移动网络,直连 GitHub,未使用代理。
我在 Termux 上首次运行mcpp build的实测情况:网络环境
- 移动网络,直连 GitHub(未使用代理)
- 下载
patchelf+ninja+aarch64-linux-musl-gcc(约 226 MB)
耗时
- 总计约 8~10 分钟完成首次初始化 + 编译 hello 项目
工具链位置
GCC 被放在:
~/.mcpp/registry/data/xpkgs/xim-x-musl-gcc/15.1.0/bin/ ~/.../15.1.0/bin $ ls aarch64-linux-musl-c++ ar gcc-nm nm aarch64-linux-musl-cc as gcc-ranlib objcopy aarch64-linux-musl-g++ c++ gcov objdump aarch64-linux-musl-gcc c++filt gcov-dump ranlib aarch64-linux-musl-gcc-15.1.0 cpp gcov-tool readelf aarch64-linux-musl-gcc-ar elfedit gprof size aarch64-linux-musl-gcc-nm g++ ld strings aarch64-linux-musl-gcc-ranlib gcc ld.bfd strip addr2line gcc-ar lto-dump~/.../15.1.0/bin $ ./gcc --version gcc (GCC) 15.1.0 Copyright (C) 2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ~/.../15.1.0/bin $
Reacted by SPeak

平台信息
实际尝试过程
尝试一:用 CMake 编译 mcpp 主项目
结果:卡在依赖解析阶段,报错找不到 mcpplibs.cmdline
尝试二:单独编译依赖 mcpplibs.cmdline
git clone https://github.com/mcpplibs/cmdline.git cd cmdline xmake build结果:xmake 构建失败,提示找不到 C++23 标准库模块
尝试三:直接用 xmake 编译 mcpp
cd mcpp xmake build结果:同样因为缺少标准库模块而失败
问题本质
环境信息