【问题标题】:Clang 10 fails to link C++ application with CMake on macOS 10.12Clang 10 无法在 macOS 10.12 上将 C++ 应用程序与 CMake 链接起来
【发布时间】:2020-03-30 15:31:37
【问题描述】:

我有一个运行 macOS 10.12 的 Jenkins 构建服务器。

我正在使用最新的 Clang 10(不是 AppleClang)和 CMake 3.17 编译 C++ 应用程序。

我得到的错误是:

The C++ compiler

"/Users/XXX/llvm/bin/clang++"

is not able to compile a simple test program.

It fails with the following output:

ld: unknown option: -platform_version
clang-10: error: linker failed with exit code 1

这适用于同一服务器上的 Clang 9,而 Clang 10 在 macOS 10.15 上运行良好,所有其他构建工具和源文件都相同(Jenkins 每次运行一个干净的构建)。它似乎是 Clang 10 和 macOS 10.12 的组合。 Clang 9 和 Clang 10 之间有什么变化会导致这种情况吗?

我正在像这样调用 CMake:

cmake -DCMAKE_OSX_SYSROOT="${macos_sdk}" \
      -DCMAKE_C_COMPILER="${llvm_bin}/clang" \
      -DCMAKE_CXX_COMPILER="${llvm_bin}/clang++" \
      -DCMAKE_OSX_ARCHITECTURES=${architectures} \
      -DCMAKE_BUILD_TYPE=${make_build_type} ..

【问题讨论】:

  • which ld 或者 cmake 使用哪个 ld
  • @Richard Barber lld 来自 Clang 10 所在的 LLVM 10 bin 目录。通过 -DCMAKE_LINKER="${llvm_bin}/lld" 传递给 CMake,其中 llvm_bin 是 LLVM 10 在我的构建服务器上的位置
  • 还有什么版本的ld。我怀疑您使用的是 520 之前的二进制文件。
  • @Richard Barber - ld -v 给了ld64-305 ... LTO support using: LLVM version 9.0.0 (clang-900.0.39.2) ...
  • @Richard Barber,使用 DCMAKE_CXX_LINK_EXECUTABLE 似乎无法解决问题 - 基于这种思路,可能是 CMake 忽略了我要使用的链接器?

标签: c++ macos cmake clang llvm-clang


【解决方案1】:

通过 -mlinker-version=305 将链接器版本传递给 Clang 解决了该问题。

对于 CMake,可以这样做:

-DCMAKE_CXX_FLAGS="-mlinker-version=305"

不禁觉得这是一个错误。

在出现问题的 macOS 10.12 上,可以通过ld -v 获取链接器版本。

一个方便的 bash 函数,用于获取 ld 版本以传递给 Clang:

#!/bin/bash

function get_ld_version() {
  local info=$( ld -v 2>&1 > /dev/null )

  echo "${info}" | perl -wne '/.ld64-(.*?)[^0-9]/ and print "$1\n"'
}

【讨论】:

  • 您是否考虑将其添加为您的other question 的答案?我认为当前接受的答案有些误导。
  • @fakedad,my other question 的公认答案确实回答了另一个问题。我的另一个问题是在这里解决问题的错误问题。
【解决方案2】:

以防万一有人在测试 C 和 C++ 编译器的 CLion IDE 中使用 CMAKE,添加 -DCMAKE_CXX_FLAGS="-mlinker-version=405" 还不够,您还需要添加 "-DCMAKE_C_FLAGS="-mlinker-version=405",当然正如 @keith 提到的那样,您应该使用自己的链接器版本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2012-09-14
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多