clang abi兼容相关查询记录

prebuilt环境可能是ubuntu18,  这里只记录一些参考的分析

--->实际是链接器不同导致的,指定的llvm而不是系统默认的链接器,至于为什么使用lld有问题,还没分析清楚;

 参考:

terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_M_construct null not valid Aborted (core dumped)

https://www.reddit.com/r/cpp_questions/comments/lpuyp9/terminate_called_after_throwing_an_instance_of/

https://root-forum.cern.ch/t/root-on-freebsd-again/26806/9

Is clang++ ABI same as g++? [duplicate]

https://stackoverflow.com/questions/11682748/is-clang-abi-same-as-g

根据clang libc ++页面,他们的目标是

与gcc的libstdc ++的ABI兼容,可用于某些底层功能,例如异常对象,rtti和内存分配。

这似乎暗示他们并不是针对100%的兼容性。例如,在该页面上,他们还说:

通过多年的经验(包括之前实现过标准库),我们学到了很多有关实现标准容器的事情,这些事情需要ABI破损以及实现方式的根本变化。例如,对于多核计算机(尤其是在具有右值引用的C ++'0x中),使用“短字符串优化”而不是使用写时复制(COW)构建std :: string是一种较好的方法,这是公认的。已确定破坏与旧版本库的ABI兼容性对于实现libc ++的性能目标至关重要。

我相信GCC仍在使用引用计数的COW,因此clang似乎并不担心与ABI的兼容性std::string(与较旧的clang编译的二进制文件或与GCC兼容)。

  • 4
    与VC ++相同。“在每个主要版本(VS 2005、2008、2010、2012等)中,我们都更改了STL对象的表示形式,例如字符串和向量,使其与二进制不兼容。我们现在具有链接器检查,可防止混合编译目标文件/静态库用(见不同的主要版本(2010 +)......” social.msdn.microsoft.com/forums/en-us/vcgeneral/thread/... -  SChepurin 7月27日在'12 8:22 

  • 我想反而C ABI是100%兼容的,对不对? –  Emanuele '12 Jul 27'9:44
  • 11
    libc++我认为这与Clang不同。为什么anwser专注于标准库兼容性,而不是语言二进制兼容性?很明显,它们对方法使用相同的调用约定,它们在堆栈上返回对象,并且通常在语言级别上是二进制兼容的吗? –  cubuspl42 2014年 6月22日0:48 
  • 5
    正如上面的注释正确指出的那样,标准库的ABI兼容性与编译器的ABI不同。例如,clang++ -stdlib=libstdc++将生成与g ++ 100%ABI兼容的代码。但是,如今,clang-stdlib=libc++默认使用(而不是stdlibc++)。因此,尽管在发布时是错误的,但此答案在随后的几年中意外地变得正确了,至少在OSX上是如此。(编写此答案时,clang的默认设置为-stdlib=libstdc++,因此默认情况下二进制文件与g ++兼容。) –  Stuart Berg 15年9月24日在17:45

  • 顺便说一句,因为gcc 5.1 libstdc ++不再默认为COW字符串,因为C ++ 11禁止使用它们来更改ABI。(某些发行版,例如Slackware,继续使用旧的ABI)。libstdc ++继续支持两个ABI,但是您不能将目标文件/库(除libstdc ++之外)与不同的ABI混合在一起

Standard library ABI compatibility

https://stackoverflow.com/questions/60836246/standard-library-abi-compatibility

https://stackoverflow.com/questions/41745527/cannot-view-stdstring-when-compiled-with-clang

https://www.coder.work/article/3287082

libstdc++版本冲突的解决

https://blog.csdn.net/jindingwang/article/details/7569466

Linux下GLIBCXX和GLIBC版本低造成的编译错误的解决方案

https://blog.csdn.net/fly_time2012/article/details/78482323

linux glibc不兼容问题解决

https://blog.csdn.net/itas109/article/details/106751869

关于Mull的并行参数


(完)