我该如何解决libstdc ++可移植性问题

问题描述 投票:1回答:1

我已经建立了一个在我的系统上运行的二进制文件(fedora 30),但是当我想在ubuntu上运行它时,出现以下错误:

/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./App)

解决此问题的标准方法是什么?还是我总是需要在各种操作系统上重建我的应用才能运行它?

c++ c gcc g++ glibc
1个回答
0
投票

解决此问题的标准方法是什么?

解决此问题的标准方法是定义您的minimum要求,然后以只需要此最低要求而没有其他要求的方式构建二进制文件。

例如,如果您在RedHat 7.2发行版上构建程序,并且不使用C ++,则您的程序将在不超过20年的all Linux发行版上运行。

或者我是否总是需要在各种操作系统上重建我的应用程序才能运行它?

您不。

GLIBCXX_3.4.26版本符号的特殊情况下,您已经使用GCC 9.0.0(或更高版本)构建了二进制文件:请参见ABI document

该二进制文件将不会在仅安装了GCC-8.x运行时的任何系统上运行。

避免此要求的一种方法是与-static-libstdc++标志链接。您的二进制文件会更大(可能会更大),并且可能需要以不同的形式分发(由于GPL的病毒性质;请咨询您的律师),但可以在较旧的分发版本上使用。] >或者,如果您在基于GCC-8.x的发行版上“定期”构建二进制文件,则该二进制文件在基于GCC-9.x的较新版本中应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.