Jam*_*ang 4 c++ libstdc++ libc++
最近,我在其动态部分(readelf -d)中看到了libstdc ++和libc ++的C++程序列表.
我很困惑,因为一个来自GNU,另一个来自LLVM,它们都是STL的实现.那么一个程序如何链接呢?那是什么意思?
它如何解决std::string链接时提供的符号(例如)?
例如,如果程序与一个标准库实现链接,并且还与链接到另一个的静态库链接,则可能发生这种情况.这不会导致问题,因为诸如此类的名称std::string被破坏成更长且更复杂的名称而不会发生冲突.(这也是如何使用不同的参数类型重载和调用具有相同名称的函数,以及为什么为标准库的旧版本编写的程序在升级时不会中断.)
一个重要的警告:只有当STL不是链接到不同版本的任何组件的接口的一部分时,这才有效.否则,任何客户端代码都将针对标准库的不同版本进行编译,而不是在调用该组件时链接到该标准库,或甚至将错误的数据结构传入和传出库.