You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac aarch64平台GCC编译多目标文件出现重复T符号问题

问题描述

环境与项目信息

  • 系统:Mac(aarch64架构),内核版本 xnu-10063.121.3~5/RELEASE_ARM64_T8103 arm64
  • 项目结构:简单C++项目,包含main.cpp、src/s1.cpp、src/s1.hpp及对应的CMakeLists.txt
  • 编译工具表现:
    • Apple clang 15.0.0:编译运行正常,std::source_location能正确输出代码位置
    • brew安装的GCC(11.4/13.1/14.1版本):编译后出现段错误,且s1.cpp中调用std::source_location::current()时输出的是main.cpp的位置

调试与观察结果

  • 调试发现s1.cpp中与std::source_location相关的指针无效,值为0x000000001
  • 查看目标文件:main.cpp.o和s1.cpp.o中都存在std::source_location成员函数的T(全局)符号,而Linux平台下GCC编译会生成W(弱)符号
  • 移除其中一个文件的<boost/asio.hpp>引用后,GCC编译可正常运行,但目标文件中仍存在T符号

疑问

  1. 上述符号冲突现象是否违反C++标准?
  2. 对Boost的使用方式是否存在错误?
  3. 链接器为何允许重复的全局符号存在?

请求

请ARM架构Mac用户帮忙复现该问题,确认是否为环境特例


内容的提问来源于stack exchange,提问作者SupAl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:43:12