程序同时链接到libstdc ++和libc ++是什么意思?

时间:2018-12-23 04:09:12

标签: c++ libstdc++ libc++

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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