在 macOS 上将 -fuse-ld=lld 与 Clang 结合使用
Using -fuse-ld=lld with Clang on macOS
我在 macOS 10.15 上使用 Clang 10(不是 AppleClang),并尝试通过在 CMake 标志 CMAKE_EXE_LINKER_FLAGS
.
中指定 -fuse-ld=lld
来 link 使用 LLD
但是,当我尝试使用 LLD 时出现以下错误:
The C++ compiler
"/Users/XXX/llvm/bin/clang++"
is not able to compile a simple test program.
It fails with the following output:
ld64.lld: warning: ignoring unknown argument: -platform_version
ld64.lld: warning: ignoring unknown argument: -search_paths_first
ld64.lld: warning: ignoring unknown argument: -headerpad_max_install_names
ld64.lld: warning: -sdk_version is required when emitting min version load command. Setting sdk version to match provided min version
ld64.lld: error: Unable to find library for -lc++
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [cmTC_0d561] Error 1
make: *** [cmTC_0d561/fast] Error 2
这是我的程序:
#include <iostream>
#include <cstdlib>
int main()
{
std::cout << "Hello World!" << std::endl;
return EXIT_SUCCESS;
}
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
project(test VERSION 2.0 LANGUAGES CXX)
add_executable(testprog "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp")
这是我的 bash 启动 CMake 的脚本:
#!/bin/bash
root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
sys_root="/Users/XXX/macOS-sdks/MacOSX10.13.sdk"
cmake_bin_path="/Applications/CMake.app/Contents/bin"
llvm_bin="/Users/XXX/llvm/bin"
function add_search_path() {
if [ -d "" ] && [[ ":$PATH:" != *"::"* ]]; then
PATH="${PATH:+"$PATH:"}"
fi
}
add_search_path $cmake_bin_path
add_search_path $llvm_bin
cd "${root}/build"
cmake -DCMAKE_OSX_SYSROOT=${sys_root} \
-DCMAKE_C_COMPILER="${llvm_bin}/clang" \
-DCMAKE_CXX_COMPILER="${llvm_bin}/clang++" \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_BUILD_TYPE=Debug ..
cores=`sysctl -n hw.physicalcpu`
cmake --build "${root}/build" --target all -- -j ${cores}
./testprog
lld
不适用于 macOS。使用 ld
又名 ld64
。
比照。 http://lists.llvm.org/pipermail/cfe-dev/2019-March/061666.html
AppleClang 是 LLVM-Clang 的精简版。使用所需项目构建后者,lld 也适用于 macOS 上的简单程序。
搜索 git 历史显示 lld-mach-o 也有生命迹象!
它失败了 -framework
标志。如果您发现错误,请在 https://bugs.llvm.org/buglist.cgi?bug_status=__open__&component=MachO&product=lld
报告
有关 Clang 编译说明(以及在 Xcode 中使用它的方法)请参阅
我在 macOS 10.15 上使用 Clang 10(不是 AppleClang),并尝试通过在 CMake 标志 CMAKE_EXE_LINKER_FLAGS
.
-fuse-ld=lld
来 link 使用 LLD
但是,当我尝试使用 LLD 时出现以下错误:
The C++ compiler
"/Users/XXX/llvm/bin/clang++"
is not able to compile a simple test program.
It fails with the following output:
ld64.lld: warning: ignoring unknown argument: -platform_version
ld64.lld: warning: ignoring unknown argument: -search_paths_first
ld64.lld: warning: ignoring unknown argument: -headerpad_max_install_names
ld64.lld: warning: -sdk_version is required when emitting min version load command. Setting sdk version to match provided min version
ld64.lld: error: Unable to find library for -lc++
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [cmTC_0d561] Error 1
make: *** [cmTC_0d561/fast] Error 2
这是我的程序:
#include <iostream>
#include <cstdlib>
int main()
{
std::cout << "Hello World!" << std::endl;
return EXIT_SUCCESS;
}
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
project(test VERSION 2.0 LANGUAGES CXX)
add_executable(testprog "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp")
这是我的 bash 启动 CMake 的脚本:
#!/bin/bash
root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
sys_root="/Users/XXX/macOS-sdks/MacOSX10.13.sdk"
cmake_bin_path="/Applications/CMake.app/Contents/bin"
llvm_bin="/Users/XXX/llvm/bin"
function add_search_path() {
if [ -d "" ] && [[ ":$PATH:" != *"::"* ]]; then
PATH="${PATH:+"$PATH:"}"
fi
}
add_search_path $cmake_bin_path
add_search_path $llvm_bin
cd "${root}/build"
cmake -DCMAKE_OSX_SYSROOT=${sys_root} \
-DCMAKE_C_COMPILER="${llvm_bin}/clang" \
-DCMAKE_CXX_COMPILER="${llvm_bin}/clang++" \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_BUILD_TYPE=Debug ..
cores=`sysctl -n hw.physicalcpu`
cmake --build "${root}/build" --target all -- -j ${cores}
./testprog
lld
不适用于 macOS。使用 ld
又名 ld64
。
比照。 http://lists.llvm.org/pipermail/cfe-dev/2019-March/061666.html
AppleClang 是 LLVM-Clang 的精简版。使用所需项目构建后者,lld 也适用于 macOS 上的简单程序。
搜索 git 历史显示 lld-mach-o 也有生命迹象!
它失败了 -framework
标志。如果您发现错误,请在 https://bugs.llvm.org/buglist.cgi?bug_status=__open__&component=MachO&product=lld
有关 Clang 编译说明(以及在 Xcode 中使用它的方法)请参阅