在aarch64机器上安装clang来生成codonjit python模块 一开始想用docker安装, 结果拉取的镜像CPU架构不对无法启动。nbskylin-pc:~/桌面$ sudo docker pull ghcr.io/silkeh/clang:21-trixie 输入密码 21-trixie: Pulling from silkeh/clang 0b233165d073: Pull complete bce2073474a5: Pull complete c7a5eef2ddc9: Pull complete Digest: sha256:8c5aee059ffdc87dcf5d177f50fbf85602568e42d1580e41b01d8a4e7563c65d Status: Downloaded newer image for ghcr.io/silkeh/clang:21-trixie ghcr.io/silkeh/clang:21-trixie nbskylin-pc:~/桌面$ sudo docker run -itd -v /home/nbs/par:/par --networkhost --name clang21 ghcr.io/silkeh/clang:21-trixie WARNING: The requested images platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested 648b20a8afb2517453fab6287f60060b07893f07869cd6cf87b2a8523b4cd70d改用apt来安装先进入一个空的ubuntu容器。先修改apt源为清华源然后依次执行apt updateapt install clang。nbskylin-pc:~/桌面$ sudo docker start ubuntu26 ubuntu26 nbskylin-pc:~/桌面$ sudo docker exec -it ubuntu26 bash rootkylin-pc:/# vi /etc/apt/sources.list bash: vi: command not found rootkylin-pc:/# mv /etc/apt/sources.list /etc/apt/sources.list.old # 默认注释了源码镜像以提高 apt update 速度如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-backports main restricted universe multiverse # 以下安全更新软件源为官方源配置 deb http://security.ubuntu.com/ubuntu/ resolute-security main restricted universe multiverse # deb-src http://security.ubuntu.com/ubuntu/ resolute-security main restricted universe multiverse # 预发布软件源不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-proposed main restricted universe multiverse # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-proposed main restricted universe multiverse rootkylin-pc:/# cp /par/sources.list /etc/apt/sources.list rootkylin-pc:/# apt update Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu resolute InRelease [136 kB] ... Get:24 http://ports.ubuntu.com/ubuntu-ports resolute-security/main arm64 Packages [60.1 kB] Fetched 24.0 MB in 4s (6087 kB/s) 18 packages can be upgraded. Run apt list --upgradable to see them. Notice: Some sources can be modernized. Run apt modernize-sources to do so. rootkylin-pc:/# apt install clang Upgrading: libc-bin libc-gconv-modules-extra libc6 Installing: clang Installing dependencies: binfmt-support gcc-15-base libclang-cpp21 libffi-dev libjansson4 libobjc4 libubsan1 llvm-21-linker-tools python3-yaml binutils libasan8 libclang-rt-21-dev libgc1 libllvm21 libpfm4 libxml2-dev llvm-21-runtime rpcsvc-proto binutils-aarch64-linux-gnu libbinutils libclang1-21 libgcc-15-dev liblsan0 libpipeline1 libyaml-0-2 llvm-21-tools zlib1g-dev binutils-common libc-dev-bin libctf-nobfd0 libgprofng0 liblzma-dev libsframe3 linux-libc-dev manpages clang-21 libc6-dev libctf0 libhwasan0 libncurses-dev libstdc-15-dev llvm-21 manpages-dev clang-tools-21 libclang-common-21-dev libedit2 libitm1 libobjc-15-dev libtsan2 llvm-21-dev python3-pygments Suggested packages: binutils-doc binutils-gold wasi-libc glibc-doc ncurses-doc pkgconf man-browser ttf-bitstream-vera gprofng-gui clang-21-doc libc-devtools liblzma-doc libstdc-15-doc llvm-21-doc python-pygments-doc Summary: Upgrading: 3, Installing: 52, Removing: 0, Not Upgrading: 15 Download size: 168 MB Space needed: 928 MB / 140 GB available Continue? [Y/n] ... Setting up clang (1:21.1.6-71) ... Setting up llvm-21-dev (1:21.1.8-6ubuntu1) ... Processing triggers for libc-bin (2.43-2ubuntu2) ... rootkylin-pc:/# clang --version Ubuntu clang version 21.1.8 (6ubuntu1) Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/lib/llvm-21/bin安装的版本是21.1.8。然后用sqlite3源码测试clang编译。比gcc编译的sqlite3运行速度要慢一点。rootkylin-pc:/# cd /par/sqlite*8 rootkylin-pc:/par/sqlite-20260511102558-45a2152908# clang shell.c sqlite3.c -O3 -lpthread -lm -ldl -o sqlite3cl rootkylin-pc:/par/sqlite-20260511102558-45a2152908# time ./sqlite3cl ../sum.sql ╭──────────────────╮ │ sum(value) │ ╞══════════════════╡ │ 5000000050000000 │ ╰──────────────────╯ real 0m3.057s user 0m3.039s sys 0m0.001s rootkylin-pc:/par/sqlite-20260511102558-45a2152908# time ./sqlite3o2 ../sum.sql ╭──────────────────╮ │ sum(value) │ ╞══════════════════╡ │ 5000000050000000 │ ╰──────────────────╯ real 0m2.599s user 0m2.574s sys 0m0.004s检查python版本建立虚拟环境设定codon安装目录为搜索路径用pip安装codon-jit模块。rootkylin-pc:/# python3 Python 3.14.4 (main, Apr 8 2026, 04:02:31) [GCC 15.2.0] on linux Type help, copyright, credits or license for more information. rootkylin-pc:/par/tpy3145# python/bin/python -m venv codonenv rootkylin-pc:/par/tpy3145# source codonenv/bin/activate (codonenv) rootkylin-pc:/par/tpy3145# export PATH/par/codon/bin:$PATH (codonenv) rootkylin-pc:/par/tpy3145# pip install codon-jit --no-index -f ../tpy314/314 Looking in links: ../tpy314/314 Processing /par/tpy314/314/codon_jit-0.4.6.tar.gz Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Processing /par/tpy314/314/cython-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (from codon-jit) Processing /par/tpy314/314/astunparse-1.6.3-py2.py3-none-any.whl (from codon-jit) Processing /par/tpy314/314/wheel-0.47.0-py3-none-any.whl (from astunparse-codon-jit) Processing /par/tpy314/314/six-1.17.0-py2.py3-none-any.whl (from astunparse-codon-jit) Processing /par/tpy314/314/packaging-26.2-py3-none-any.whl (from wheel1.0,0.23.0-astunparse-codon-jit) Building wheels for collected packages: codon-jit Building wheel for codon-jit (pyproject.toml) ... done Created wheel for codon-jit: filenamecodon_jit-0.4.6-cp314-cp314-linux_aarch64.whl size108289 sha256afb7a1ccdf2f0c1719a4242aeac4d795401da68c1bc1dd62c2664041c396e146 Stored in directory: /root/.cache/pip/wheels/9f/36/32/3748d95f34594fa442964a7d1b6f99f14360459c5ca6a36caf Successfully built codon-jit Installing collected packages: six, packaging, cython, wheel, astunparse, codon-jit Successfully installed astunparse-1.6.3 codon-jit-0.4.6 cython-3.2.4 packaging-26.2 six-1.17.0 wheel-0.47.0执行测试脚本报错缺少numpy安装后就能够执行了。(codonenv) rootkylin-pc:/par/tpy3145# time python ../test-codonjit.py Traceback (most recent call last): File /par/tpy3145/../test-codonjit.py, line 1, in module import codon File /par/tpy3145/codonenv/lib/python3.14/site-packages/codon/__init__.py, line 7, in module from .decorator import jit, convert, execute, JITError, JITWrapper, _jit_register_fn, _jit_callback_fn, _jit File /par/tpy3145/codonenv/lib/python3.14/site-packages/codon/decorator.py, line 13, in module import numpy as np ModuleNotFoundError: No module named numpy real 0m0.062s user 0m0.049s sys 0m0.012s (codonenv) rootkylin-pc:/par/tpy3145# pip install numpy --no-index -f ../tpy314/314 Looking in links: ../tpy314/314 Processing /par/tpy314/314/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl Installing collected packages: numpy Successfully installed numpy-2.4.4 (codonenv) rootkylin-pc:/par/tpy3145# time python ../test-codonjit.py [python] 8392 | took 56.61279606819153 seconds [codon] 8392 | took 3.6273505687713623 seconds real 1m10.909s user 1m10.861s sys 0m0.638s (codonenv) rootkylin-pc:/par/tpy3145# time codon run ../test-codon.py [python] 8392 | took 1.32626 seconds real 0m3.896s user 0m4.436s sys 0m0.143s (codonenv) rootkylin-pc:/par/tpy3145# time codon run --release ../test-codon.py [python] 8392 | took 1.39554 seconds real 0m3.903s user 0m4.487s sys 0m0.076s但是build二进制文件不行。报g错误但已经生成了test-codon.o目标文件。(codonenv) rootkylin-pc:/par/tpy3145# time codon build --release ../test-codon.py error: process for g exited with status 255 real 0m2.461s user 0m3.045s sys 0m0.109s (codonenv) rootkylin-pc:/par/tpy3145# clang ../test-codon.o -o ../test-codoncl /usr/bin/aarch64-linux-gnu-ld.bfd: ../test-codon.o: in function main: test-codon.py:(.text0x24): undefined reference to seq_init /usr/bin/aarch64-linux-gnu-ld.bfd: test-codon.py:(.text0x28): undefined reference to seq_stdout /usr/bin/aarch64-linux-gnu-ld.bfd: test-codon.py:(.text0x30): undefined reference to seq_stdin ... /usr/bin/aarch64-linux-gnu-ld.bfd: test-codon.py:(.text0x150): undefined reference to seq_alloc_atomic /usr/bin/aarch64-linux-gnu-ld.bfd: test-codon.py:(.text0x1c8): undefined reference to seq_print_full /usr/bin/aarch64-linux-gnu-ld.bfd: test-codon.py:(.text0x1dc): undefined reference to seq_print_full /usr/bin/aarch64-linux-gnu-ld.bfd: ../test-codon.o:(.data.DW.ref.seq_personality[DW.ref.seq_personality]0x0): undefined reference to seq_personality clang: error: linker command failed with exit code 1 (use -v to see invocation)想用clang代替g链接.o文件也不行。