gpt4 book ai didi

c++ - GLIBCXX 版本

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:53 31 4
gpt4 key购买 nike

如果我在我的机器上编译一个 C++ 程序,并在另一台机器上运行它(使用较旧的软件),我会得到:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found

事实上,在我的系统上,glibc 比较新(我有 gcc-libs 4.5.1: libstdc++.so.6.0.14)和 strings/usr/lib/libstdc++.so.6 | grep GLIBCXXGLIBCXX_3.4 打印到 GLIBCXX_3.4.14。相反,在另一个系统上,它最多只打印 GLIBCXX_3.4.8 (我得到了 libstdc++.so.6.0.8)。

所以我有几个问题:

  1. 为什么我的链接器将 C++ 二进制文件链接到 libstdc++ 版本 GLIBCXX_3.4.9 而不是 GLIBCXX_3.4.14

  2. 如果我根据 libstdc++ 版本 GLIBCXX_3.4 编译我的二进制文件,我想它几乎可以在任何地方运行。这是否意味着任何问题? (例如:它会使用旧的 - 因此更糟糕的 - 算法实现吗?)

  3. 如果我静态将我的程序链接到我的 libstdc++,我想它会在任何地方运行;当然,二进制文件会更大(~1MB),还有其他优点/缺点吗?

  4. 我可以强制链接器将我的二进制文件链接到给定版本的 libstdc++ 吗?

最佳答案

使用readelf -aobjdump -x优先于 strings 检查 ELF 文件.

实际上,所有 GLIBCXX_* 版本并不适用于整个库,而是适用于每个符号(符号版本控制,请参阅 DSO-howto )。所以你可以有例如:std::char_traits<wchar_t>::eq@@GLIBCXX_3.4.5std::ios_base::Init::~Init()@@GLIBCXX_3.4在同一个库文件上。

您的程序需要 GLIBCXX_3.4.9 的事实可能意味着它已链接到已在 GLIBCXX_3.4.9 上引入/已更改语义的符号。

关于c++ - GLIBCXX 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098429/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com