将 C++14 Linux 应用程序移植到 Solaris 10 和 11

Port C++14 Linux application to Solaris 10 and 11

目前正在将现有的 c++ linux 应用程序移植到 Solaris 10 和 11(首先是 x86,然后是 SPAARC)。

开始在solaris 10上安装gcc5g++并开始编译。在 math.h 中出现错误,发现是我安装的 g++5.5 版本中的错误。由于这个错误,我得到了

这样的错误

/opt/csw/lib/gcc/i386-pc-solaris2.10/5.5.0/include-fixed/math.h:53:12: 错误: 'std::double_t' 尚未声明 使用 std::double_t; ^

/opt/csw/lib/gcc/i386-pc-solaris2.10/5.5.0/include-fixed/math.h:55:12: 错误: 'std::fpclassify' 尚未声明 使用 std::fpclassify; ^

/opt/csw/lib/gcc/i386-pc-solaris2.10/5.5.0/include-fixed/math.h:56:12: 错误: 'std::isfinite' 尚未声明 使用 std::isfinite; ^


因为我的应用程序使用了 g++ 4.92 不完全支持的 c++14 结构。需要更高版本的 g++(5.5 以上)

我找不到任何可以在 Solaris 10 上安装更高版本 g++ 的软件包,因此我使用了一台安装了 g++ 7.3 的 Solaris 11 机器来尝试执行在 Solaris 11 上生成的可执行文件到 Solaris 10 我得到了以下错误:


ld.so.1: hellod: fatal: libc.so.1: 未找到版本 'SUNWpublic'(文件 /Desktop/hellod 需要) ld.so.1: 你好: 致命的: libc.so.1: 打开失败: 没有那个文件或目录 杀死


问题

非常感谢与此主题相关的任何帮助和指点。

首先,为了支持更高版本的 C++ 标准,您的 Solaris 10 安装需要是最新的。有关原因的示例,请参阅 Unable to include cmath using GCC 5.5 on Solaris 10。阅读评论 - 需要将补丁应用到 Solaris 10 以使其与 C++11 兼容,并且可能与 C++14 兼容。

一般来说,您无法在 Solaris 11 上编译,运行 无法在 Solaris 10 上生成二进制文件。

好处是,您应该能够在 Solaris 10 上编译,运行 在 Solaris 11 上也能正常编译,因此您不必维护两个独立的环境,也不必发布两个独立的 Solaris 产品。你会想用你的二进制文件来测试它,但理论上它应该工作 - 根据我的经验,它 确实 工作。

我找不到适用于 Solaris 10 的任何更高版本(晚于 5 左右),因此您可能需要 bootstrap 您自己的 GCC 7 左右版本或更高版本。见 https://unix.stackexchange.com/questions/446760/how-to-build-a-gcc-4-9-0-successfully-on-solaris-10-sparc for an example of building GCC 4.9.0 on Solaris 10 SPARC. Note that GCC support for Solaris 10 is likely to end soon, per this posting: https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html:

Therefore I think it's time to obsolete support for that version in GCC 9, thus removing it in GCC 10.

我已经好几年没有在 Solaris 10 上构建 GCC,所以我不知道您可以 运行 构建 GCC 7 或 8。

另一种可能的替代方法是使用 Oracle Developer Studio 而不是 GCC。 12.6 版支持 C++14,可用于 Solaris 10 和 11。

一个警告 - 无论您如何编译,您几乎肯定会想要静态 link libgcclibstdc++,尤其是如果您编译自己的 GCC。