gpt4 book ai didi

c++ - GLIBCXX 版本

转载 作者:IT老高 更新时间:2023-10-28 12:39:13 26 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优先检查 ELF 文件而不是 strings .

实际上,所有 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 上引入/已更改语义的符号链接(symbolic link)。

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

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