2

我正在构建一个可再发行的 .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?

4

2 回答 2

3

我如何告诉我的 gcc/g++ 针对旧版本的 GLIBXX 进行编译/链接,以便我的用户不会收到此错误?

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

  1. 使用旧g++版本构建,或
  2. 静态链接libstdc++.a到您的共享库,并隐藏其符号(这也可能涉及许可问题,请咨询您的律师)。
  3. 将您的版本与您的库打包libstdc++.so.6在一起,并要求拥有旧版本的用户安排选择您的新版本(也有许可问题,但我相信这些更容易满足)。
于 2012-04-16T21:34:28.823 回答
0

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

于 2012-04-16T19:56:31.263 回答