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的位置
- Apple clang 15.0.0:编译运行正常,
调试与观察结果
- 调试发现
s1.cpp中与std::source_location相关的指针无效,值为0x000000001 - 查看目标文件:
main.cpp.o和s1.cpp.o中都存在std::source_location成员函数的T(全局)符号,而Linux平台下GCC编译会生成W(弱)符号 - 移除其中一个文件的
<boost/asio.hpp>引用后,GCC编译可正常运行,但目标文件中仍存在T符号
疑问
- 上述符号冲突现象是否违反C++标准?
- 对Boost的使用方式是否存在错误?
- 链接器为何允许重复的全局符号存在?
请求
请ARM架构Mac用户帮忙复现该问题,确认是否为环境特例
内容的提问来源于stack exchange,提问作者SupAl
相关产品推荐
相关产品推荐

