【问题标题】:What does it mean for a program to link to both libstdc++ and libc++?程序链接到 libstdc++ 和 libc++ 意味着什么?
【发布时间】:2018-12-23 04:09:12
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 一个非常重要的假设:STL 不是库的公共 API 的一部分
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多