【问题标题】:How do I disable --version-script when cross compiling clang/LLVM on a Mac?在 Mac 上交叉编译 clang/LLVM 时如何禁用 --version-script?
【发布时间】:2014-01-10 12:39:07
【问题描述】:

我正在尝试在 Mac 上交叉编译基于 ELLCC cross development tools project 的 clang/LLVM。我的目标是 ARM/Linux。构建 FileCheck(或 tbl-gen 或在交叉编译构建工具步骤期间构建的任何其他构建工具)时构建失败,因为构建规则尝试将 --version-script 选项传递给链接器。有很多配置魔法正在进行,我似乎找不到说不要在 Mac 上使用 --version-script 的咒语。

稍微澄清一下我的问题。 ELLCC 在 Mac 上构建良好,并创建可用于创建 ARM/Linux 程序(或 Mips/Linux、Microblaze/Linux、PowerPC/Linux 等)的可执行文件。我遇到的麻烦是当我尝试让 ELLCC 为目标编译自身时。

clang/LLVM 需要它提供的几个需要在构建主机上运行的工具。这些工具正在使用本机 Mac clang 正确编译为 Mac 可执行文件,但链接阶段混淆并尝试使用 --version-script,即使 Mac 链接器不支持它。

【问题讨论】:

    标签: macos clang llvm cross-compiling


    【解决方案1】:

    事实证明,用于交叉构建内容的规则存在问题。当我在 OS X 上为 Linux 构建时,变量 HOST_OS 是 Makefile.rules 中的“Linux”。我不得不添加一个达尔文条件:

    ifeq ($(HOST_OS), $(filter $(HOST_OS), DragonFly Linux NetBSD FreeBSD GNU/kFreeBSD GNU))
    ifneq ($(shell uname -s),Darwin)
    ifneq ($(ARCH), Mips)
      LD.Flags += -Wl,--version-script=$(LLVM_SRC_ROOT)/autoconf/ExportMap.map
    endif
    endif
    endif
    endif
    

    应该是BUILD_OS vs. HOST_OS,或者这里的HOST_OS设置不正确。

    【讨论】:

      【解决方案2】:

      你的头衔中实际上有魔法标志(或咒语)。我想您可能正在寻找:

         --disable-ld-version-script
      

      还有一些处理交叉编译的建议和注意事项,可以在here 找到(交叉编译自引导工具部分可能是相关的)。

      【讨论】:

      • 几乎正确,但感谢您提供的信息。看我的回答。
      猜你喜欢
      • 2014-07-19
      • 2020-08-29
      • 2015-12-24
      • 2014-03-10
      • 2020-10-05
      • 2019-12-11
      • 2013-08-12
      • 1970-01-01
      • 2011-11-05
      相关资源
      最近更新 更多