程序同时链接到libstdc++和libc++意味着什么?
What does it mean for a program to link to both libstdc++ and libc++?
最近,我看到一个C++程序在其动态部分(readelf -d
)中同时列出了libstdc++和libc++。
我很困惑,因为一个来自GNU,另一个来自LLVM,它们都是STL的实现。 那么程序如何链接两者呢? 这是什么意思?
链接时,它如何解析两者提供的符号(例如std::string
)?
例如,如果程序与一个标准库实现链接,并且还链接到另一个标准库的静态库,则可能会发生这种情况。这不会引起问题,因为诸如std::string
之类的名称会被修改成更长、更复杂的名称,不会发生冲突。 (这也是重载和调用具有相同名称的函数的方式,以及为什么为旧版本的标准库编写的程序在升级时不会中断的原因。
一个重要的警告:仅当 STL 不是链接到不同版本的任何组件的接口的一部分时,这才有效。 否则,任何客户端代码都将针对与调用该组件时链接的不同版本的标准库进行编译,甚至将错误的数据结构传入和传出库。
相关文章:
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- 这行代码在C++类中意味着什么
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 寻找地理和伤害意味着超载
- 安装 libc++ 时出现问题
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 在C++标准中做格式好意味着代码可以编译
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- C++评估顺序优化是否意味着对不同的操作数使用不同的内核?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 负指数是否必然意味着未定义的行为
- 我可以在 ndk 中使用带有 libc++ 的实验性文件系统吗?
- 程序同时链接到libstdc++和libc++意味着什么?