如何摆脱“GLIBCXX_3.4.9找不到错误”?

我正在build立一个redistrbutable .so文件。

但是,当我的用户尝试使用它,他们得到可怕的/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.9' not found错误。

做一个objdump,它似乎是在我的二进制引起的问题这个特殊的符号: _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@@GLIBCXX_3.4.9

我如何告诉我的gcc / g ++编译/链接对旧版本的GLIBXX,以便我的用户不会得到这个错误?

还是解决这个难题的唯一方法就是安装一个单独的具有GLIBXX的旧版本的Linux?

我如何告诉我的gcc / g ++编译/链接对旧版本的GLIBXX,以便我的用户不会得到这个错误?

没有办法做到这一点。 你唯一的选择是:

  1. 用旧的g++版本构建,或者
  2. libstdc++.a静态地链接到共享库中,并隐藏它的符号(这也可能有许可的含义,请咨询你的律师)。
  3. 将你的libstdc++.so.6版本与你的库一起libstdc++.so.6 ,然后询问那些拥有较旧版本的用户来安排选择你的新版本(也有许可的含义,但我相信这些更容易满足)。

您正在编译GLIBCXX_3.4.9,因此您的用户至少需要具有GLIBCXX_3.4.9。