0

我正在做一个项目,该项目需要在 Linux 机器上执行,结果证明它没有GLIBCXX_3.4.20库的版本,但代码需要它。有没有办法找到我的代码(C++)的哪一部分要求这个版本?

objdump我使用and读取了 ELF 文件realdef,发现哪个符号需要它: _ZSt24__throw_out_of_rang@GLIBCXX_3.4.20 (4) 但我不知道我的代码的哪一部分可以关联。

4

1 回答 1

1

你的问题本质上是这个问题的重复。

除了你的情况,它不是libc.so.6,但这libstdc++.so会给你带来麻烦。

您的问题是您正在使用新的 GCC 进行编译,但正在使用旧的libstdc++.so.

你有几个选择:

  • 您可以更新目标机器以获得足够新的libstdc++.so
  • 您可以使用旧版本的 GCC 构建
  • 您可以使用-static-libstdc++标志将所需的版本libstdc++直接链接到您的应用程序中。这将生成一个更大的二进制文件,但它根本不会使用libstdc++.so

    请注意,如果您链​​接到其他与 链接的共享库,libstdc++.so的二进制文件可能无法在目标计算机上正确运行,因此应谨慎使用此解决方案。
于 2015-05-16T02:21:18.907 回答