簡體   English   中英

Clang 10 無法在 macOS 10.12 上將 C++ 應用程序與 CMake 鏈接

[英]Clang 10 fails to link C++ application with CMake on macOS 10.12

我有一個運行 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"

忍不住覺得這是一個錯誤。

在出現問題的 macOS 10.12 上,可以通過ld -v獲得鏈接器版本。

一個方便的 bash 函數,用於獲取傳遞給 Clang 的ld版本:

#!/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"'
}

以防萬一有人使用 CMAKE 和 CLion IDE 來測試 C 和 C++ 編譯器,添加-DCMAKE_CXX_FLAGS="-mlinker-version=405"還不夠,您還需要添加"-DCMAKE_C_FLAGS="-mlinker-version=405" ,當然正如@keith 提到的,你應該使用你自己的鏈接器版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM