c++ - Clang 10 无法在 macOS 10.12 上将 C++ 应用程序与 CMake 链接起来
问题描述
我有一个运行 macOS 10.12 的 Jenkins 构建服务器。
我正在使用带有 CMake 3.17 的最新 Clang 10(不是 AppleClang)编译 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"'
}
推荐阅读
- asp.net - 与 Shopify 和 HTML/CSS 共享域名
- github - 如何在 Azure DevOps 中创建每次都创建 GitHub 版本的发布管道?
- python - 在 Qlabel 中获取 QPixmap 的实际大小
- swift - JTAppleCalendar 更新到 8.0 后无法触发 didSelectDate
- python - 尝试安装和运行 Flask 但我不断收到错误消息
- php - PHP/MySQL - 需要帮助获取用户的适用事件列表
- c# - .Net 测试项目的用户特定和秘密数据存储在哪里?
- c++ - 如何结束 do-while 循环?
- r - 通过行和列的对称差异连接/合并两个数据帧
- css - 如何在 Markdown 中获得对图像的更多样式控制?