c++ - Clang 10 无法在 macOS 10.12 上将 C++ 应用程序与 CMake 链接

标签 c++ macos cmake clang llvm-clang

我有一个运行 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} ..

最佳答案

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

对于 CMake,这可以像这样完成:

-DCMAKE_CXX_FLAGS="-mlinker-version=305"

忍不住觉得这是一个错误。

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

一个方便的 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"'
}

关于c++ - Clang 10 无法在 macOS 10.12 上将 C++ 应用程序与 CMake 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60934005/

相关文章:

c# - 接口(interface) : simplified

c++ - 服务器如何知道客户端仍处于连接状态?

macos - 获取执行dmg包的文件名

macos - 有关详细信息,请参阅 : ’go help gopath’

c++ - 如何使用 CMake 构建和链接外部 CMake 依赖项?

C++ 管道数据以 block 的形式打印出来

c++ - 查找不在索引 vector 中的索引

javascript - https-options 请求仅在 Safari 10 Mac 和 iOS cors 中失败(400 错误请求)

c++ - 如何在cmake中使用#include保持目录结构?

cuda - 如何防止cmake链接到libcudart.so?