我曾经在Docker中为Centos7构建动态库,并且一切正常,直到发生某些事情(或者我更改了某些东西),现在.so要求libstdc ++和glibcxx 3.4.20。如何降级要求?谢谢!
请注意:
我只需要知道为什么要升级以及如何取回它。
upd: 如果我执行objdump,则会得到以下符号:
[root@a0d062ba3109 bin]# objdump -x ../plugin/va/lib/libvaplugin.so | grep GLIBCXX_3.4.20
...
_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20
看起来矢量:: range_check使用throw_out_of_range_fmt。但是,为什么它开始使用它并且以前不使用throw_out_of_range_fmt?
答案 0 :(得分:1)
但是为什么它开始使用它并且以前不使用throw_out_of_range_fmt?
您开始使用以前未使用的某些功能。猜猜:
std::vector::at
。通过将_ZSt24__throw_out_of_range_fmtPKcz
添加到库的链接行中,可以准确地找到对-Wl,-y,_ZSt24__throw_out_of_range_fmtPKcz
的引用。这将告诉您库中的哪个.o
需要该符号。
使用objdump -dr foo.o
查找对符号的引用,您将知道哪个函数正在调用它。
正如Jesper Juhi所说,如果您需要使用GCC-4.9之前版本的库libstdc++
,则应使用GCC-4.9之前的编译器进行构建。