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
相关产品推荐
相关产品推荐

