【问题标题】:Can CPython be compiled with Clang?CPython 可以用 Clang 编译吗?
【发布时间】:2023-03-19 16:59:01
【问题描述】:

我正在尝试使用 Clang 构建 CPython,但要求非常具体:

我尝试将环境变量CC 设置为我的clang 可执行位置(即/opt/llvm/5/bin/clang,但./configure 命令失败并显示以下内容:
configure: error: C compiler cannot create executables

我应该设置什么标志才能使这个构建工作?

【问题讨论】:

  • 您说的是编译 CPython 解释器本身,而不是用 Python 语言编写的程序,对吧?
  • 已修复。 CPython 中也没有 C++
  • 查看configure.log 或类似文件,它应该列出它尝试运行的所有命令!
  • 您收到的错误消息表明您的 Clang/LLVM 安装工作不正常。 config.log 的某处可能隐藏着有用的信息。请在该文件中查找“C 编译器无法创建可执行文件”并在该点上方和下方编辑可能 20 行到问题中。
  • (我不知道 CPython 不能 用 clang 编译的任何原因 - 它不像 Linux 内核,它使用一堆 GCC 对 C 的扩展Clang 拒绝采用。)

标签: python c clang cpython


【解决方案1】:

正如 OP 帖子的评论者所指出的,您可以使用 clang 编译 cpython。以下是 Dockerfile 形式的可重现说明。

FROM ubuntu:16.04
WORKDIR /opt/cpython-2.7.14
RUN apt-get update -qq \
    && apt-get install --yes build-essential curl \
    # Install clang
    && curl -fsSL https://releases.llvm.org/5.0.0/clang+llvm-5.0.0-linux-x86_64-ubuntu16.04.tar.xz \
    | tar xJ -C /usr/local --strip-components 1 \
    && curl -fsSL https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz \
    | tar xz --strip-components 1 \
    && CC=/usr/local/bin/clang ./configure --prefix /usr/local/cpython-2.7.14 \
    && make \
    && make install
ENTRYPOINT ["/usr/local/cpython-2.7.14/bin/python"]
docker build --tag cpython:2.7 .
docker run --rm cpython:2.7 --version
# Python 2.7.14

很难说 OP 的原始问题是什么,因为它似乎是 clang 安装的问题。查看配置日志将提供更多信息。

免责声明:Python 2 已结束生命周期,而 ubuntu 16.04 将在 2021 年 4 月结束生命周期。

【讨论】:

    【解决方案2】:

    尝试将环境变量 CC 设置为我的 clang 可执行位置

    在 Linux 上,在 Bash 中定义一个别名,如下所示: alias cc="clang"

    在我的系统上,我将其设置为alias cc="clang-11"

    另外,请务必在系统上安装所有 clang 和 llvm 包。

    【讨论】:

    • 这个选项是唯一在我的 Debian 系统上有效的解决方案。
    • 别名不被子进程继承。 configure 甚至无法知道这个别名的存在。这不可能。
    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多