libstdc++ 通过不同的库进行静态和动态链接

libstdc++ both statically and dynamically linked through different libraries

提问人:Karthick S 提问时间:10/10/2023 最后编辑:user17732522Karthick S 更新时间:10/10/2023 访问量:66

问:

  1. 我的可执行文件动态链接两个库(d1.so 和 d2.so)。
  2. d1.so 静态链接到 libstdc++。
  3. d2.so 动态链接到 libstdc++。

假设首先加载 d1.so,则在以下情况下将调用哪个 stdlib(动态或静态)方法,

  1. d1.so 调用 stdlib 方法。
  2. d2.so 调用 stdlib 方法。
  3. 可执行文件调用 stdlib 方法。

如果 d1.so 和 d2.so 都是由不同的编译器版本编译的,会不会因为混用 stdlib 而导致运行时出现问题?

C 静态 动态链接 libstdc++

评论

0赞 aschepler 10/10/2023
请注意,静态链接通常只包含库的一部分,除非使用类似的东西。-Wl,--whole-archive
3赞 Jesper Juhl 10/10/2023
尽量不要那样做。
1赞 Paul Sanders 10/10/2023
你真的遇到什么问题吗?
3赞 user17732522 10/10/2023
@KarthickS我认为你所处的领域是你必须自己分析和修复东西的领域。在我看来,错误出在.即使你让它编译,如何保证你最终不会得到来自不同库版本的不匹配的函数实现?我不认为在库边界上保证了 ABI 之外的兼容性。还是将 libstdc++ 作为隐藏和私有链接到自身?但我也不指望这会得到支持。Libstdc++ 假定对某些资源的所有权,例如 stdout for std::cout,这肯定会干扰。d1.sod1.so
2赞 463035818_is_not_an_ai 10/10/2023
实际上是什么?“操作员<<不起作用”到底是什么意思?请提供一个最小的可重复示例d1.sod2.so

答: 暂无答案