我正在构建一个可重写的.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,以便我的用户不会收到此错误?
或者是解决这个难题的唯一方法来安装一个单独的旧版本的linux有一个GLIBXX?
答案 0 :(得分:3)
如何告诉我的gcc / g ++编译/链接旧版本的GLIBXX,以便我的用户不会收到此错误?
没有方法可以做到这一点。您唯一的选择是:
g++
版本或libstdc++.a
静态链接到您的共享库中,然后隐藏其符号(这也可能会产生许可影响,请咨询您的律师)。libstdc++.so.6
版本与您的图书馆一起打包,并要求使用旧版本的用户安排选择更新版本(也有许可含义,但我相信这些更容易满足)。 答案 1 :(得分:0)
您正在为 GLIBCXX_3.4.9构建,因此您的用户也需要至少拥有GLIBCXX_3.4.9。