解决Clang 18+不能链接GCC14编译的库的问题

前面笔者的博文MSYS2 MinGW64使用Protobuf新版本踩坑,有提到使用最新的Clang 19.1.4版本在MinGW下无法正常链接使用了Protobuf 28.3的项目,因为MinGW下的项目默认都是使用GCC来编译的,所以如果开发者使用Clang编译器,必然会出现链接MinGW下的这些GCC编译的库。其实该问题同样存在于Linux下,Linux下的库默认也是使用GCC来编译的。

笔者在遇到问题时,喜欢知其然,也要尽量知其所以然!笔者查了一下资料,Clang编译器从18开始为了更好地支持C++20,对ABI进行了一些修改,特别是概念相关的命名冲突,就导致了一些函数的ABI发生了变化,原文如下:

在这里插入图片描述

Between Clang 17 and Clang 18, we implemented an ABI fix to resolve mangled name collisions, but unfortunately that changes the manglings of a small number of functions such as this one (which previously was a case where mangling collisions between different functions could happen). The ABI change fixed a longstanding bug, but we finally reached sufficient motivation to fix it due to some C++20 changes, primarily the addition of concepts, which made these kinds of symbol collisions more likely to occur in practice in the future. This was just an all-round bad situation, and sadly we didn’t have a path forward that supported C++20 well and had no risk of breaking anything.

为了使用Clang也能正确链接到GCC编译的库,针对Clang 18+,可以使用命令行参数-fclang-abi-compat=17来解决这个问题。对于CMake而言,在顶层CMakeLists.txt中添加:

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-fclang-abi-compat=17)
endif()

即可。

据说Clang编译器开发人员在考虑添加[[clang::abi_compat(17)]]属性来从代码层面解决此类问题。因为前面也说了,修改ABI的主要原因是为了更好的支持C++20,如果项目中有使用C++20的概念相关代码,又有absl此类问题的代码,那项目全部使用-fclang-abi-compat=17也会出现问题,所以局部解决是最好的,期待Clang的更新~~~,也期待GCC与Clang的ABI能尽快再次统一!!

如果本文对你有帮助,欢迎点赞收藏!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35046.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

城市内涝监测预警系统解决方案-智慧排水

成因分析 气候变化 受全球气候变暖导致大气水循环加快,环流不稳定性增加,进一步引发极端降雨事件受城市热岛效应、雨岛效应的影响,强降雨常集中于城市且雨量多,强度大且雨量多。 排水系统不完善 城市发展快,城市防洪排涝工程&a…

Python:使用随机森林分类器进行模型评估:ROC 曲线与 AUC 指标计算

前言 这段代码的目标是使用 随机森林分类器(Random Forest Classifier) 来进行二分类任务,并基于每个数据子集计算 ROC 曲线(Receiver Operating Characteristic Curve)以及 AUC(Area Under Curve&#xf…

【JAVA练习】力扣1232.缀点成线

题目: 解题思路: 直线上面的点满足公式:, 如果所有点在一条直线上,即任意两点的斜率相同,由于计算斜率存在精度的问题,可以将除法等价于乘法。 等价于 class Solution {public boolean che…

【SKFramework框架核心模块】3-12、网络请求模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…

C# 反射(Reflection)

文章目录 前言一、反射的优缺点(一)优点(二)缺点 二、反射的用途(一)查看特性(attribute)信息(二)审查集合中的各种类型并实例化(三)实…

Jdk配置、maven配置、gradle配置、Java开发常用的依赖库

一、配置JDK环境变量: 1. 安装 JDK 首先确保已经安装了 JDK。如果还没有安装,可以从 Oracle 官网 或者 AdoptOpenJDK 下载并安装合适的 JDK 版本。 我建议下载这个:https://adoptium.net/zh-CN/temurin/releases/?oswindows&archx64&…

【AI系统】FBNet 系列

FBNet 系列 本文主要介绍 FBNet 系列,在这一章会给大家带来三种版本的 FBNet 网络,从基本 NAS 搜索方法开始,到 v3 版本的独特方法。在本节中读者会了解到如何用 NAS 搜索出最好的网络和训练参数。 FBNet V1 模型 FBNetV1:完全基于 NAS 搜…

二十三、Linux可视管理之webmin和bt运维工具

1、webmin 基本介绍 Webmin 是功能强大的基于 Web 的 Unix/linux 系统管理工具。管理员通过浏览器访问 Webmin 的各种管理功能并完成相应的管理操作。除了各版本的 linux 以外还可用于:AIX、HPUX、Solaris、Unixware、Irix 和 FreeBSD 等系统安装webmin&配置 …

聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程

聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程 系统采用FastAdmin框架独立全新开发,安全稳定,系统支持代理、商户、码商等业务逻辑。 针对最近一些JD,TB等业务定制,子账号业务逻辑API 非常详细,方便内置…

Transformer真的是机器人技术的基础吗?

生成式预训练Transformer(GPT)被吹捧为将彻底改变机器人技术。但实际应用中,GPT需要庞大且昂贵的计算资源、冗长的训练时间以及(通常)非机载无线控制,诸多限制之下,GPT技术真的实用吗&#xff1…

使用脚本语言实现Lumerical官方案例——闪耀光栅(Blazed grating)(纯代码)(2)

接《使用脚本语言实现Lumerical官方案例——闪耀光栅(Blazed grating)(纯代码)(1)》 一、添加分析组 1.1 代码实现 #添加分析组 addanalysisgroup(); set("name", "grating_R"); set("x", 0); set("y", 2.5*um); addanalysisgrou…

【Java】异常处理见解,了解,进阶到熟练掌握

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口,我们大家庭已经来啦~ 目录 1.(throws和throw)我们不管这个异常&…

Oracle数据库 用户管理模式下的冷备份与热备份

1. 用户管理模式下的冷备份 1.1. 通过数据库相关视图查询 查实例 select instance_name,version,status,archiver,database_status from v$instance; 查数据库 select dbid,name,log_mode from v$database; 查数据文件状态 select file_name,tablespace_name,status,o…

Solon 3.0.4 发布(Spring 的替代方案,备胎计划)

Solon 框架! 面向全场景的 Java 应用开发框架。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态。新一代 Java 应用软件的生态基座。开放原子开源基金会,孵化项目。 追求: 更快、更小、更简单…

严格单元测试造就安全软件

在信息技术迅速发展的今天,软件在各个行业中扮演着至关重要的角色,尤其是在汽车行业,其中软件的可靠性和安全性直接影响到人们的生命安全。软件缺陷所带来的潜在风险不容小觑,尤其在涉及到自动驾驶和车辆控制等关键系统时&#xf…

基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用

在研究流场时,常用观测、模型风洞测试和数值模拟方法进行研究。但时常遇到研究区气象站点分布稀疏,不能代表周边复杂地形的风场。风洞模拟需要对地形进行实景的微缩,但实际过程中可能更关心近地表边界层的风场。风洞模拟一方面费用较高&#…

手写签名OCR识别-提升文档处理效率

随着数字化办公和智能化管理的普及,企业在日常业务中处理的各类单据和文件数量与日俱增。这些文件不仅包括了繁琐的文字信息,还涉及到重要的签名和印章等手写元素。尤其是在合同、协议、发票、审批单等文档中,手写签名不仅是身份确认的重要标…

Flutter:webview打开网页

官方文档地址 下方代码来自官方文档&#xff0c;先简单记录下如何通过webview打开某个http地址 添加权限&#xff1a;android/app/src/main/AndroidManifest.xml <uses-permission android:name"android.permission.INTERNET"/>pubspec.yaml webview_flutter: …

WPF+LibVLC开发播放器-音量控制和倍速控制

界面 界面上增加音量的控件和倍速控制控件 音量控制 主要也是一个Slider进度条控件来实现音量调节 我们这里设置默认的最大值为100&#xff0c;默认Value值也为100&#xff0c;默认声音开到最大 这里目前完全由前端控制音量调节&#xff0c;可以直接使用ValueChanged事件实…

重生之我在异世界学编程之C语言:初识一维和二维数组篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文数组的基本类型&#xff1a;一维…