我已经建立了一个在我的系统中运行的二进制文件(fedora 30),但是当我想在ubuntu上运行它时,出现以下错误:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./App)
解决此问题的标准方法是什么?还是我总是需要在各种操作系统上重建我的应用才能运行它?
解决此问题的标准方法是什么?
解决此问题的标准方法是定义最低要求,然后以仅要求最低要求而无其他要求的方式构建二进制文件。
例如,如果您在RedHat 7.2发行版上构建程序,而不使用C ++,则您的程序将在不超过20年的所有Linux发行版上运行。
还是我总是需要在各种操作系统上重建我的应用才能运行它?
你不知道
在GLIBCXX_3.4.26
版本符号的特殊情况下,您已经使用GCC 9.0.0(或更高版本)构建了二进制文件:请参阅ABI文档。
仅安装了GCC-8.x运行时的系统无法在任何系统上运行该二进制文件。
避免此要求的一种方法是与-static-libstdc++
flag链接。您的二进制文件会较大(可能很多大),并且它可能需要以不同的形式进行分配(由于GPL的病毒性质;与您的律师检查),但它会在旧的发行工作。
另外,如果您在基于GCC-8.x的发行版中“定期”构建二进制文件,则该二进制文件在基于GCC-9.x的较新版本中应该可以正常工作。
另一个解决方案是将二进制文件分发到具有所有先决条件的Docker容器中。
PS:我不建议您实际运行物理RedHat-7.2主机。使用仅具有旧发行版的隔离VM进行构建应该可以。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句