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