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

GCC不为类外默认复制构造函数生成机器码的链接疑问

GCC与Clang对默认复制/移动构造函数的编译差异疑问

给定如下翻译单元(TU)的代码:

struct X {
    int i;
    
    X(const X&);
    X(X&&);
};

X::X(const X&) = default;
X::X(X&&) = default

编译时出现如下差异:

  • 使用Clang编译,会同时为复制构造函数和移动构造函数生成机器码;
  • 使用GCC编译,仅为移动构造函数生成机器码,复制构造函数的机器码在目标文件中缺失。

该现象并非在线编译工具的问题,在本地Linux系统通过objdump验证后,结果一致。

核心疑问:
当存在另一个调用该复制构造函数的翻译单元时,GCC会在第二个TU中生成复制构造函数的调用指令,但第一个TU里依然没有复制构造函数的机器码。这种情况下,链接器是如何将多个目标文件成功链接在一起的?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:42:04