You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Clang交叉编译的Numpy依赖libgcc_s.so.1问题求助

解决Numpy交叉编译依赖libgcc_s.so.1的问题

下面是几个针对性的排查和解决方向,按优先级尝试:

先揪crossenv的工具链配置问题

激活crossenv环境后,先跑echo $CC $CXX $LDSHARED看看这几个核心变量是不是真的指向你的Clang交叉编译工具链——要是指向了GCC,直接手动覆盖:

export CC=你的clang交叉编译器路径(比如arm-linux-gnueabihf-clang)
export CXX=对应的clang++路径
export LDSHARED="你的clang路径 -shared"

另外去crossenv生成的环境目录里找sitecustomize.py或者相关配置脚本,看看有没有硬编码指定GCC的逻辑,有的话直接改成Clang的路径。

强制Numpy构建时用Clang,别让它瞎检测

Numpy的构建系统有时候会自己猜编译器,直接给它硬塞参数:

  • 安装前先设好全局编译变量,指定目标平台:
    export CFLAGS="-target 你的目标平台三元组"
    export CXXFLAGS="-target 你的目标平台三元组"
    export LDFLAGS="-target 你的目标平台三元组"
    
    比如目标是arm32平台的话,三元组就是arm-linux-gnueabihf。
  • 或者直接在pip安装时传编译选项:
    pip install numpy --global-option=build_ext --global-option="-cc=你的clang路径" --global-option="-cxx=你的clang++路径"
    
  • 还可以写个site.cfg文件,放在Numpy源码根目录(或者pip安装时用--sitecfg=/path/to/your/site.cfg指定),明确告诉它用Clang:
    [DEFAULT]
    compiler = clang
    

检查你自己编译的目标Python有没有带GCC依赖

别光怪Numpy,先看看你给目标平台做的Python本身是不是依赖libgcc_s.so.1——跑readelf -d /path/to/target/python/bin/python3 | grep NEEDED,要是输出里有libgcc_s.so.1,说明你编译Python的时候没彻底用Clang,得重新编译Python:

CC=你的clang交叉编译器 CXX=对应的clang++ ./configure --host=目标平台三元组 --prefix=安装路径
make && make install

如果目标平台用libc替代libstdc的话,还要加LDFLAGS="-stdlib=libc++"。

让Clang别默认链GCC的库

有些Clang交叉链会默认链接GCC的libstdc++,强制它用自己的libc++:

export CFLAGS="-stdlib=libc++"
export CXXFLAGS="-stdlib=libc++"
export LDFLAGS="-stdlib=libc++ -lc++abi"

记得目标平台上要提前装好libc和libcabi库。

试试禁用Numpy的外部依赖模块

Numpy里的一些优化模块(比如依赖OpenBLAS的部分)可能会隐式拉GCC的库,先试试不带这些依赖编译,看能不能解决:

export BLAS=None
export LAPACK=None
pip install numpy

要是没问题,后续再用Clang编译OpenBLAS/LAPACK后重新编译Numpy就行。


内容的提问来源于stack exchange,提问作者Lawrence Kok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:12:42