pydroid3 中文文档 下载 App

内置 C/C++/Fortran 编译器 —— pip 能编译原生扩展的关键

为什么需要它

Python 的大多数库是纯 Python 写的,但一些高性能库(NumPy、SciPy、cryptography、lxml...)的核心部分是用 C/C++ 写的原生扩展——pip 安装时需要编译这些 C 代码才能用。

标准 pip 在普通 Android 上装这些库会卡在「找不到 C 编译器」这一步。Pydroid 的解法是直接把编译器打包进 App。

内置了什么

Pydroid 内置了一套完整的交叉编译工具链(针对 ARM Android 目标):

组件版本/说明
GCC (C 编译器)专为 Pydroid 定制,输出 ARM Android ELF
G++ (C++ 编译器)同上
GFortranFortran 编译器(SciPy 依赖)
Make构建工具
CMake跨平台构建系统
头文件C 标准库 + Python.h + 常见系统库头
链接器ld 等 binutils 工具

这套工具链的编译目标是 arm-linux-androideabi-gcc 风格的交叉编译器——编译出来的 .so 文件可以直接在 Android 的 ARM CPU 上运行。

它怎么被用到

当 pip 安装一个没有预编译 wheel 的包时:

  1. pip 下载源码包(.tar.gz)
  2. 解压后运行 setup.py build_ext 或 pyproject.toml 里的 build 脚本
  3. build 脚本调用编译器工具链编译 C/C++/Fortran 源码
  4. 编译产物(.so 动态库)被拷贝到 Python 的 site-packages 目录

整个过程 Pydroid 自动处理,用户不需要手动调用 gcc。

Cython 支持

Pydroid 还内置了 Cython——一种把 Python 代码转写成 C 然后编译的加速工具。如果你的项目里有 .pyx 文件,Pydroid 可以编译它们。这在科学计算场景里很有用(加速热点函数)。

能用它做什么

除了装 Python 库之外,你还可以:

1. 编译独立的 C 程序

打开 Terminal,直接写一个简单的 C 文件,用 gcc 编译,然后运行生成的 .so:

cat > hello.c << 'EOF'
#include <stdio.h>
int main() { printf("Hello from C on Android!\n"); return 0; }
EOF
gcc -o hello.so hello.c -shared

2. 交叉编译需要的第三方 C 库

某些 Python 包的源码编译依赖外部 C 库(比如 OpenSSL、libffi)。Pydroid 内置了常用的几个,但不是全部。缺库时 pip 会在编译阶段报「找不到 xxx.h」——这种情况一般没法在 Pydroid 里解决。

限制