gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:19:59 26 4
gpt4 key购买 nike

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

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

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

最佳答案

what is the standard way to solve this problem?



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

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

or do I always need to rebuild my app on various os to run it?



你不知道

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

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

避免此要求的一种方法是与 -static-libstdc++标志链接。您的二进制文件会更大(可能更大),并且可能需要以其他形式分发(由于GPL的病毒性质;请咨询您的律师),但是它可以在较旧的分发版本上使用。

或者,如果您在基于GCC-8.x的发行版上“定期”构建二进制文件,则该二进制文件在基于GCC-9.x的较新版本中应该可以正常工作。

另一个解决方案是将二进制文件分发到具有所有先决条件的Docker容器中。

附言我不建议您实际运行物理RedHat-7.2主机。使用仅具有旧发行版的隔离VM进行构建应该可以。

关于c++ - 我该如何解决libstdc++可移植性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60660701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com