程序同时链接到libstdc++和libc++意味着什么?

What does it mean for a program to link to both libstdc++ and libc++?

本文关键字:libc++ 意味着 什么 libstdc++ 链接 程序      更新时间:2023-10-16

最近,我看到一个C++程序在其动态部分(readelf -d)中同时列出了libstdc++和libc++。

我很困惑,因为一个来自GNU,另一个来自LLVM,它们都是STL的实现。 那么程序如何链接两者呢? 这是什么意思?

链接时,它如何解析两者提供的符号(例如std::string)?

例如,如果程序与一个标准库实现链接,并且还链接到另一个标准库的静态库,则可能会发生这种情况。这不会引起问题,因为诸如std::string之类的名称会被修改成更长、更复杂的名称,不会发生冲突。 (这也是重载和调用具有相同名称的函数的方式,以及为什么为旧版本的标准库编写的程序在升级时不会中断的原因。

一个重要的警告:仅当 STL 不是链接到不同版本的任何组件的接口的一部分时,这才有效。 否则,任何客户端代码都将针对与调用该组件时链接的不同版本的标准库进行编译,甚至将错误的数据结构传入和传出库。