为什么使用clang编译但使用clang ++时,此1文件程序会导致链接器错误?

时间:2019-05-07 18:13:45

标签: c++ linker clang clang++

我认为这个程序是正确的,但是我不知道导致使用clang时在链接阶段成功编译并失败的技术问题,但是当我使用clang ++时,它可以正常工作。

#include<memory>

struct S{
  std::unique_ptr<int> up; 
};

int main(){
   S s;
   s.operator=(S{});    
}

请注意,它在我的机器上(使用clang和clang-8的Ubuntu 18.04)和coliru失败,但是在其他一些在线编译器上,它可以正常工作。

输出:

  

clang main.cpp -std = c ++ 14

     

/tmp/main-696905.o:在功能中   `std :: default_delete :: operator()(int *)const':

     

main.cpp :(。text._ZNKSt14default_deleteIiEclEPi [_ZNKSt14default_deleteIiEclEPi] + 0x2a):   未定义对`operator delete(void *)'的引用

     

/tmp/main-696905.o:在函数__clang_call_terminate中:

     

main.cpp :(。text .__ clang_call_terminate [__ clang_call_terminate] + 0x2):   未定义对__cxa_begin_catch的引用

     

main.cpp :(。text .__ clang_call_terminate [__ clang_call_terminate] + 0xb):   未定义对`std :: terminate()'的引用

     

/tmp/main-696905.o :(。eh_frame + 0x7f):未定义的引用   `__gxx_personality_v0'

     

clang:错误:链接器命令失败,退出代码为1(使用-v查看   调用)

当我尝试使用clang ++而不是clang时,它会起作用。

0 个答案:

没有答案