macOS使用LLVM官方发布的tar.xz来安装Clang编译器
之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz,那MacOS应该也是可以安装的。
笔者2015款MBP笔记本,CPU是intel的,出厂系统是MacOS10.12(Sierra),后面自己升级安装到10.13(由于只有128G硬盘,不能安装太新的系统):

目前的Clang编译器是9.0,__cplusplus版本是201406,支持C++14,部分支持C++17,如果想使用新一点的C++标准,就需要更新编译器。
一、安装Clang编译器
LLVM官方在LLVM 15及之前是有出Intel版本的tar.xz安装包的,后面有的版本没macOS版本的,有的版本有macOS的,但是是ARM CPU的,后面19.0开始有macOS版本的了,而且ARM与Intel的都有。

只可惜笔者的MBP系统太老,不能安装最新版本的,只能退而求其次,安装LLVM 15.0.7,而且有Intel CPU的x86_64版本:

先下载clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz
,再使用下面的命令解压:
tar -xf clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz
解压后,可以将目录改名为llvm-15,然后移动到/usr/local/目录下,为了确保独立性,不弄脏/usr/local/目录,直接将整个llvm-15目录移动,而不是移动llvm-15下的子目录。

然后在~/.bash_profile中设置PATH,将/usr/local/llvm-15/bin添加到PATH变量中:
export PATH=/usr/local/llvm-15/bin:$PATH
二、测试、使用
1.简单测试
添加好后,新开一个终端进行简单测试,测试clang没问题:
$ clang -v
clang version 15.0.7
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /usr/local/llvm-15/bin
但是测试lldb就报错了:
$ lldb
dyld: Library not loaded: @rpath/liblldb.15.0.7.dylibReferenced from: /usr/local/llvm-15/bin/lldbReason: no suitable image found. Did find:/usr/local/llvm-15/bin/../lib/liblldb.15.0.7.dylib: cannot load 'liblldb.15.0.7.dylib' (load command 0x80000034 is unknown)/usr/local/llvm-15/bin/../lib/liblldb.15.0.7.dylib: stat() failed with errno=1
Abort trap: 6
使用otool -l /usr/local/llvm-15/lib/liblldb.15.0.7.dylib指令查看:
$ otool -l /usr/local/llvm-15/lib/liblldb.15.0.7.dylib
/usr/local/llvm-15/lib/liblldb.15.0.7.dylib:
Mach headermagic cputype cpusubtype caps filetype ncmds sizeofcmds flags0xfeedfacf 16777223 3 0x00 6 31 3400 0x00910085
Load command 0cmd LC_SEGMENT_64cmdsize 872segname __TEXTvmaddr 0x0000000000000000vmsize 0x00000000067c8000fileoff 0filesize 108822528maxprot 0x00000005initprot 0x00000005nsects 10flags 0x0
Sectionsectname __text……Load command 4cmd LC_ID_DYLIBcmdsize 56name @rpath/liblldb.15.0.7.dylib (offset 24)time stamp 1 Thu Jan 1 08:00:01 1970current version 15.0.7
compatibility version 0.0.0
Load command 5cmd ?(0x80000034)cmdsize 16
Load command 6cmd ?(0x80000033)cmdsize 16
Load command 7cmd LC_SYMTABcmdsize 24symoff 119381816nsyms 180001stroff 122268616strsize 16367424
Load command 8cmd LC_DYSYMTAB
发现还真是有未知命令:cmd ?(0x80000034),cmd ?(0x80000033),暂时无法解决,就还是使用系统自带的lldb吧。
2. 使用VSCode测试
只要设置好Clang的路径在PATH变量中,打开VSCode,重新扫描工具包,即可搜索到新的Clang版本。

切换到Clang 15,VSCode会自动重新执行CMake命令:

[cmake] FAILED: cmTC_d20cb
[cmake] : && /usr/local/llvm-15/bin/clang -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/cmTC_d20cb.dir/testCCompiler.c.o -o cmTC_d20cb && :
[cmake] ld: unknown option: -platform_version
[cmake] clang-15: error: linker command failed with exit code 1 (use -v to see invocation)
[cmake] ninja: build stopped: subcommand failed.
无法正确执行CMake,CMake在编译简单的测试程序时,无法通过。
ld: unknown option: -platform_version提示是ld找到不到参数,原因是新版本的Clang编译器与系统的链接器ld不匹配,需要使用Clang自己的链接器lld,由于是CMake在测试编译器时报的错,那就需要在它之前设置使用lld。
CMake中要设置链接器使用lld,有两种方法:
- 可以在cmake命令行参数中设置如下变量:
- CMAKE_EXE_LINKER_FLAGS:设置可执行文件链接器的变量,用法:
-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld,注意大小写 - CMAKE_SHARED_LINKER_FLAGS:设置动态链接库链接器的变量,用法:
-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld - CMAKE_LINK_LIBRARY_FLAG:设置静态链接库链接器的旗标,用法:
-DCMAKE_LINK_LIBRARY_FLAG=-fuse-ld=lld - CMAKE_LINKER_TYPE:在3.29版本添加的新变量,用法:
-DCMAKE_LINKER_TYPE=LLD,注意LLD是大写
在VSCode中需要在settings.json配置文件中设置:
"cmake.configureArgs": ["-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld","-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld","-DCMAKE_LINK_LIBRARY_FLAG=-fuse-ld=lld","-DCMAKE_LINKER_TYPE=LLD" // CMake3.29+才能使用
],
- 在
CMakeLists.txt中设置
如果是在CMakeLists.txt中设置,一定要在最顶层的CMakeLists.txt中project命令之前设置:
cmake_minimum_required(VERSION 3.25)
set(CMAKE_EXE_LINKER_FLAGS -fuse-ld=lld)
set(CMAKE_SHARED_LINKER_FLAGS -fuse-ld=lld)
set(CMAKE_LINK_LIBRARY_FLAG -fuse-ld=lld)
set(CMAKE_LINKER_TYPE LLD)
project(demo)

编译链接都没问题了。
3. 使用QtCreator测试
笔者在MBP上安装的是QtCreator 5.03版本,基于Qt5.15.2的:

但Qt的SDK是5.14.2:

可以先使用QtCreator的自动检测,看是否能检测到Clang15,如果不能,手动添加:

在Kits中克隆一个原来的配置,将下面的C/C++编译器设置为clang 15:

并在CMake Configuration中添加如下配置:
CMAKE_EXE_LINKER_FLAGS:STRING=-fuse-ld=lld
CMAKE_LINK_LIBRARY_FLAG:STRING=-fuse-ld=lld
CMAKE_SHARED_LINKER_FLAGS:STRING=-fuse-ld=lld
如下图所示:

在Qt项目中使用新的Kits编译即可。
但是笔者在设置好后,QtCreator会有一个警告:

cstdlib源码:
#if !defined(_LIBCPP_CXX03_LANG)
using ::at_quick_exit _LIBCPP_USING_IF_EXISTS;
using ::quick_exit _LIBCPP_USING_IF_EXISTS;
#endif
#if _LIBCPP_STD_VER > 14
using ::aligned_alloc _LIBCPP_USING_IF_EXISTS;
#endif
原因是at_quick_exit和quick_exit函数在C11中添加,而std::at_quick_exit和std::quick_exit函数在C++11中添加,参见:
https://cppreference.cn/w/c/program/at_quick_exit
https://cppreference.cn/w/cpp/utility/program/at_quick_exit
aligned_alloc是在C11中添加,而std::aligned_alloc是在C++17中添加,参见:
https://cppreference.cn/w/c/memory/aligned_alloc
https://cppreference.cn/w/cpp/memory/c/aligned_alloc
笔者MacOS系统原来的C库缺少这几个函数的,可以在一个头文件中声明一下,不让QtCreator报警告:
lost.h
#ifndef LOST_H
#define LOST_H#include <_ctype.h>int at_quick_exit(void (*)());
int quick_exit(void (*)());
void *aligned_alloc(size_t alignment, size_t size);
int timespec_get(struct timespec* const time_spec,int const base
);#endif // LOST_H
然后在#include <cstdlib>之前先#include "lost.h"即可。

不报警告了,但是在代码中不能使用这几个函数,因为系统中没有相应的实现。
如果对你有帮助,欢迎点赞收藏!
相关文章:
macOS使用LLVM官方发布的tar.xz来安装Clang编译器
之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz,那MacOS应该也是可以安装的。 笔者2015款MBP笔记本,CPU是intel的,出厂…...
【算法学习】归并排序算法思想的应用—求逆序对数量
Hey,大家好!👋 今天我们来聊聊一个有趣的话题——如何在归并排序的基础上,高效解决求逆序对数量的问题。如果你对算法感兴趣,或者正在准备算法面试,这篇文章一定会对你有所帮助!🚀 …...
一组开源、免费、Metro风格的 WPF UI 控件库
前言 今天大姚给大家分享一个开源、免费、Metro风格的 WPF UI 控件库:MahApps.Metro。 项目介绍 MahApps.Metro 是一个开源、免费、Metro风格的 WPF UI 控件库,提供了现代化、平滑和美观的控件和样式,帮助开发人员轻松创建具有现代感的 Win…...
Spring Security 应用详解
Spring Security 应用详解 集成SpringBootSpring Boot 介绍创建maven工程spring 容器配置Servlet Context配置安全配置测试 工作原理结构总览认证流程认证流程AuthenticationProviderUserDetailsServicePasswordEncoder 授权流程授权流程授权决策 自定义认证自定义登录页面认证…...
业务对象和对象的区别
"业务对象"和"对象"这两个术语在日常编程和软件工程中经常被使用,但它们之间存在一些区别,主要体现在它们的目的、范围和抽象层次上。 ### 对象(Object) 1. **定义**: - 对象是面向对象编程&#…...
81,【5】BUUCTF WEB [b01lers2020]Life on Mars
进入靶场 怎莫颠颠的,一下子就想到展博了 先把左边的挨个点一遍 在最后一个有点收获 不过也没其他收获了 这种进去给个正常网页的题目,基本都靠url获取信息了 抓包看看有没有其他信息 竟然没有任何信息 自闭了 看别人的wp去咯 为什么别人抓到的包里…...
华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程
华硕笔记本装win10哪个版本好用?华硕笔记本还是建议安装win10专业版。Win分为多个版本,其中家庭版(Home)和专业版(Pro)是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势ÿ…...
Linux进程 -fork(初识),进程状态和进程优先级
目录 一、通过系统调用创建进程-fork 1.fork的介绍 2.fork的理解 3.fork常规用法 4.fork的三个问题 5.创建多个子进程 二、进程状态 (1)Linux内核源代码 (2)进程的状态 R运行状态(运行态) S 睡眠状态&…...
数据从前端传到后端入库过程分析
数据从前端传到后端入库过程分析 概述 积累了一些项目经验,成长为一个老程序员了,自认为对各种业务和技术都能得心应手的应对了,殊不知很多时候我们借助了搜索引擎的能力,当然现在大家都是通过AI来武装自己。 今天要分析的话题是…...
macOS如何进入 Application Support 目录(cd: string not in pwd: Application)
错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…...
第38周:猫狗识别 (Tensorflow实战第八周)
目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…...
【2024年华为OD机试】 (A卷,200分)- 计算网络信号、信号强度(JavaScriptJava PythonC/C++)
一、问题描述 题目解析 问题描述 我们有一个 m x n 的二维网格地图,每个格子可能是以下几种情况之一: 0:表示该位置是空旷的。x(正整数):表示该位置是信号源,信号强度为 x。-1:表示该位置是阻隔物,信号无法直接穿透。信号源只有一个,阻隔物可能有多个。信号在传播…...
【go语言】数组和切片
一、数组 1.1 什么是数组 数组是一组数:数组需要是相同类型的数据的集合;数组是需要定义大小的;数组一旦定义了大小是不可以改变的。 1.2 数组的声明 数组和其他变量定义没有什么区别,唯一的就是这个是一组数,需要给…...
2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ 《石头台阶的“记忆”:如何用数学揭开历史的足迹》 目录 《石头台阶的“记忆”:如何用数学揭开历史的足迹》 ✨摘要✨ ✨引言✨ 1. 引言的结构 2. 撰写步骤 (1)研究背景 &#…...
使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ
目录 一、Docker Compose 简介 二、服务配置详解 1. Redis 配置 2. MySQL 配置 3. RabbitMQ 配置 三、数据持久化与时间同步 四、部署与管理 五、总结 目录挂载与卷映射的区别 现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的…...
新增自定义数据功能|UWA Gears V1.0.7
UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台,提供了实时监测和截帧分析功能,帮助您精准定位性能热点,提升应用的整体表现。 本次版本更新新增了自定义数据功能,支持灵活定义和捕获关键性能指标,满足特…...
docker 简要笔记
文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜…...
在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径
一、前言 Nextcloud 是一款开源的私有云存储解决方案,允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享,还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在 Ubuntu 22.04 LTS 上使用 Apache 和 MariaDB 安装部署 Nextcl…...
【JavaEE】-- 计算机是如何工作的
文章目录 1. 冯诺依曼体系(VonNeumann Architecture)2. CPU 基本工作流程2.1 寄存器(Register)和 内存(RAM)2.2 控制单元 CU(ControlUnit)2.3 指令(Instruction) 3. 操作系统(OperatingSystem)3.1 操作系统的定位3.2 什么是进程/任务(Process…...
政安晨的AI大模型训练实践三:熟悉一下LF训练模型的WebUI
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 启动WebUI 微调模型 LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 启动Web…...
gemeni 生成图片的提示词
[System / Prompt]You are an illustration assistant specialized in creating hand-drawn cartoon-style infographics. Follow all rules below strictly and without deviation.🎨 STYLE RULES(风格规则)Use a pure hand-drawn illustrat…...
【STM32F4系列】【HAL库】【实战解析】MPU6050 DMP姿态解算与I2C通信优化
1. MPU6050与DMP库基础解析 第一次接触MPU6050时,我被它小巧的体积和强大的功能震撼到了。这个售价不到10元的芯片,居然能同时测量三轴角加速度和三轴线加速度。在实际项目中,我发现直接读取原始数据并不难,但要想获得稳定的姿态信…...
HybridCLR Generate All报错终极解决指南:UnityLinker.exe找不到HotUpdate.dll怎么办?
HybridCLR Generate All报错终极解决指南:UnityLinker.exe找不到HotUpdate.dll怎么办? 当你正在使用HybridCLR进行Unity热更新开发时,突然遇到Generate All报错,提示UnityLinker.exe无法解析HotUpdate.dll,这确实会让人…...
中国AI模型调用量领跑全球:成本与开源优势塑造竞争新范式
当前,全球人工智能(AI)领域的竞争正经历着深刻变革。据全球最大AI模型API聚合平台OpenRouter的最新监测数据,中国AI大模型的周调用量已连续数周实现对美国的稳定且显著的超越,并在特定时期内包揽了全球调用量排行榜的前…...
利用快马平台十分钟搭建树莓派环境监测系统原型
今天想和大家分享一个快速搭建树莓派环境监测系统的小实验。作为一个硬件爱好者,我经常用树莓派做各种物联网原型开发,但每次从零开始配置环境、写基础代码都很耗时。最近发现InsCode(快马)平台能帮我省去很多重复工作,特别适合快速验证想法。…...
VMware ESXi 上玩转 SmartX 超融合社区版:OVF 镜像部署全攻略(含网络配置避坑指南)
VMware ESXi 上部署 SmartX 超融合社区版:OVF 镜像实战指南 虚拟化管理员们常常面临一个现实困境:如何在有限的硬件资源下快速体验企业级超融合架构?SmartX 超融合社区版通过 OVF 镜像部署方案,为 VMware ESXi 环境提供了轻量级验…...
小红书数据采集自动化工具实战:突破反爬限制的零基础搭建指南
小红书数据采集自动化工具实战:突破反爬限制的零基础搭建指南 【免费下载链接】XiaohongshuSpider 小红书爬取 项目地址: https://gitcode.com/gh_mirrors/xia/XiaohongshuSpider 高效数据采集是内容分析与市场研究的基础,但面对小红书等平台的反…...
2026年AI前20岗位薪酬出炉!搞AI大模型的远超同行?
AI相关,细分技术领域,薪资前20岗位,都有哪些。 今天这篇文章与铁铁们分享一下。 1 薪资榜单 如下图所示,排名第一:深度学习算法工程师,平均月薪达到3万1千; 排名第二的架构师,薪资与…...
BGE嵌入模型突破指南:解锁多模态检索增强的实战路径
BGE嵌入模型突破指南:解锁多模态检索增强的实战路径 【免费下载链接】FlagEmbedding Dense Retrieval and Retrieval-augmented LLMs 项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding 在信息爆炸的时代,如何让机器精准理解人类语…...
AI写教材大揭秘!低查重技巧让你的教材脱颖而出!
在编写教材时,依赖相关资料是必不可少的,但传统的资料整合方法已经无法满足现实需求。以往,我们需要从各种渠道,比如课标文件、学术研究以及教学案例中寻找所需的信息,这往往需要耗费数天的时间。即便信息搜集齐全&…...
