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

Alpine3.18安装curl-cffi>=0.5.9时-lstdc++找不到问题求助

解决Alpine 3.18安装curl-cffi>=0.5.9的链接错误

问题现象

在Alpine 3.18环境中安装Python依赖curl-cffi>=0.5.9时,出现编译链接错误,提示cannot find -lstdc++。本地M1芯片MacBook Pro上可正常构建Docker镜像,但云服务器上失败。已尝试安装libstdc++和libffi-dev,问题仍未解决。

错误日志

#12 59.10 gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC 
#12 59.10 -Ilibbrotli -Ilibbrotli/include -I/root/visa/.venv/include 
#12 59.10 -I/usr/local/include/python3.10 -c build/temp.linux-x86_64-cpython-310/_brotli.c
#12 59.10 -o 
#12 59.10 build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310/_brotli.o
#12 59.10 gcc -shared 
#12 59.10 build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310/_brotli.o -L/usr/local/lib -Lbuild/temp.linux-x86_64-cpython-310 -llibbrotli -lstdc++ 
#12 59.10 -llibbrotli -o build/lib.linux-x86_64-cpython-310/brotli/_brotli.abi3.so
#12 59.10 /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lstdc++: No such file or directory
#12 59.10 collect2: error: ld returned 1 exit status
#12 59.10 error: command '/usr/bin/gcc' failed with exit code 1
#12 59.10 add curl-cffi failed:
#12 59.10 Traceback (most recent call last):
#12 59.10   File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
#12 59.10     result = self.fn(*self.args, **self.kwargs)
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pdm/installers/synchronizers.py", line 286, in install_candidate
#12 59.10     self.manager.install(can)
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pdm/installers/manager.py", line 33, in install
#12 59.10     installer(str(prepared.build()), self.environment, prepared.direct_url())
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pdm/models/candidates.py", line 414, in build
#12 59.10     self.wheel = Path(builder.build(build_dir, metadata_directory=self._metadata_dir))
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pdm/builders/wheel.py", line 28, in build
#12 59.10     filename = self._hook.build_wheel(out_dir, config_settings, metadata_directory)
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pyproject_hooks/_impl.py", line 209, in build_wheel
#12 59.10     return self._call_hook('build_wheel', {
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pyproject_hooks/_impl.py", line 311, in _call_hook
#12 59.10     self._subprocess_runner(
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pdm/builders/base.py", line 261, in subprocess_runner
#12 59.10     return log_subprocessor(cmd, cwd, extra_environ=env)
#12 59.10   File "/usr/local/lib/python3.10/site-packages/pdm/builders/base.py", line 107, in log_subprocessor
#12 59.10     raise build_error(e) from None
#12 59.10 pdm.exceptions.BuildError: Build backend raised error: Showing the last 10 lines
#12 59.10 of the build output:
#12 59.10       |          curl_easy_perform
#12 59.10 gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC 
#12 59.10 -Icurl_cffi/include -Icurl_cffi/ffi -I/root/visa/.venv/include 
#12 59.10 -I/usr/local/include/python3.10 -c curl_cffi/ffi/shim.c -o 
#12 59.10 build/temp.linux-x86_64-cpython-310/curl_cffi/ffi/shim.o
#12 59.10 curl_cffi/ffi/shim.c: In function '_curl_easy_setopt':
#12 59.10 curl_cffi/ffi/shim.c:9:16: warning: unused variable 'opt_value' 

当前Dockerfile内容

FROM python:3.10-alpine3.18

MAINTAINER jiangxiaoqiang (jiangtingqiang@gmail.com)

ENV LANG=en_US.UTF-8 \
    LC_ALL=en_US.UTF-8 \
    TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \
    && mkdir -p /root/visa \
    && apk update \
    && apk add gcc wget curl vim musl-dev libstdc++ curl-dev

RUN pip install pdm
ADD . /root/visa/
WORKDIR /root/visa/
RUN pdm install
ENTRYPOINT exec /root/visa/scripts/startup-app.sh

解决方法

1. 安装g++编译包

Alpine中的libstdc++仅为运行时库,编译链接阶段需要g++包提供完整的C++标准库文件。修改Dockerfile中的apk安装命令,添加g++:

apk add gcc wget curl vim musl-dev libstdc++ curl-dev g++ libffi-dev

2. 优先使用预编译轮子(可选)

云服务器为x86_64架构,可指定安装curl-cffi的预编译轮子,跳过本地编译步骤,避免架构相关的编译问题。在执行pdm install前添加环境变量:

ENV PIP_ONLY_BINARY=curl-cffi

或者在项目的pyproject.toml中添加配置:

[tool.pdm.resolution]
only-binary = ["curl-cffi"]

3. 适配跨架构差异

本地M1 Mac为arm64架构,云服务器为x86_64,架构差异可能导致编译依赖时出现问题。若需要跨平台构建,可使用Docker buildx工具指定目标平台:

docker buildx build --platform linux/amd64 -t your-image-name .

修正后的Dockerfile示例

FROM python:3.10-alpine3.18

MAINTAINER jiangxiaoqiang (jiangtingqiang@gmail.com)

ENV LANG=en_US.UTF-8 \
    LC_ALL=en_US.UTF-8 \
    TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \
    && mkdir -p /root/visa \
    && apk update \
    && apk add gcc wget curl vim musl-dev libstdc++ curl-dev g++ libffi-dev

RUN pip install pdm
ADD . /root/visa/
WORKDIR /root/visa/
# 可选:启用预编译轮子
# ENV PIP_ONLY_BINARY=curl-cffi
RUN pdm install
ENTRYPOINT exec /root/visa/scripts/startup-app.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:35:00