【问题标题】:How to compile C program using Clang and libc other than provided by system, eg. musl?如何使用非系统提供的 Clang 和 libc 编译 C 程序,例如。肌肉?
【发布时间】:2021-12-22 12:22:26
【问题描述】:

根据clang的documentation

Clang 支持多种 C 标准库实现。

但它缺乏有关如何实际使用所需 libc 的信息。

例如,如果我的系统默认提供 Glibc,如何将 clang 与 musl 一起使用?我需要 musl 构建的 clang itesl 吗?

【问题讨论】:

标签: c clang libc musl


【解决方案1】:

从musl的官方文档来看,可能不太容易做到。

您可以尝试在您的 musl 安装路径中链接 libc.solibc.a,并指示 clang 不要链接标准 libc。你还需要一些方法让它包含来自 musl 的 include 路径的标题。

可能会出现问题。我不确定以 gcc 为目标的 musl 是否可以与 clang 编译对象一起正常工作。

这里有人的工作可能会有所帮助: https://github.com/dslm4515/CMLFS

【讨论】:

  • > 我不确定以 gcc 为目标的 musl 是否可以与 clang 编译对象一起正常工作。 “gcc-targeted musl”是指“用 gcc 构建的 musl”吗?这是否意味着我也需要 clang 编译的 musl?
  • 为什么会这样?机器码不就是机器码,不管是哪个编译器生成的吗?最后,它只是对象文件和符号。为什么这一切如此困难/交错/耦合?
  • 顺便说一句,musl 提供musl-gccmusl-clang 包装器,前者工作得很好,它使用了一种叫做“规格”的东西(我不知道这是什么)。后者似乎是“hacky”脚本,它以不寻常的方式设置/取消设置编译器和链接器标志。它在我的系统中无法开箱即用。
  • gcc-targeted 我的意思是,在官方文档中建议您使用特殊版本的 gcc(musl-gcc) 进行编译。从那我猜它可能需要一些 gcc 特定的功能来链接。
  • > 机器码不只是机器码...现实世界可能更复杂,例如调用约定可以不同。如果没有实践,我无法判断它是否有效。
猜你喜欢
  • 2012-03-01
  • 2013-10-27
  • 1970-01-01
  • 2012-01-19
  • 2012-01-17
  • 1970-01-01
  • 2011-09-22
  • 2012-02-27
  • 1970-01-01
相关资源
最近更新 更多