Clang 10 无法在 macOS 10.12 上使用 CMake link C++ 应用程序
Clang 10 fails to link C++ application with CMake on macOS 10.12
我有一个 Jenkins 构建服务器 运行 macOS 10.12。
我正在使用最新的 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 "\n"'
}
以防万一有人将 CMAKE 与 CLion IDE 一起使用,它同时测试 C 和 C++ 编译器,添加 -DCMAKE_CXX_FLAGS="-mlinker-version=405"
是不够的,您还需要添加 "-DCMAKE_C_FLAGS="-mlinker-version=405"
,当然正如@keith 提到的那样,您应该使用自己的链接器版本
我有一个 Jenkins 构建服务器 运行 macOS 10.12。
我正在使用最新的 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 "\n"'
}
以防万一有人将 CMAKE 与 CLion IDE 一起使用,它同时测试 C 和 C++ 编译器,添加 -DCMAKE_CXX_FLAGS="-mlinker-version=405"
是不够的,您还需要添加 "-DCMAKE_C_FLAGS="-mlinker-version=405"
,当然正如@keith 提到的那样,您应该使用自己的链接器版本