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

时间:2019-03-07 10:57:13

标签: g++ c++14 solaris solaris-10

当前将现有的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;             ^


由于我的应用程序使用了c ++ 14构造,而g ++ 4.92不完全支持。需要更高版本的g ++(高于5.5)

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


ld.so.1:死机:致命:libc.so.1:找不到版本“ SUNWpublic”(由文件/ Desktop / hellod要求) ld.so.1:死机:致命:libc.so.1:打开失败:没有这样的文件或目录 被杀死


问题

  • 还有其他方法可以解决我面临的错误吗?
  • 我可以在Solaris 11上编译并使其在Solaris 10上运行吗?
  • 在Solaris 10的g ++上安装更高版本的其他方法是什么?
  • 我可以交叉编译/移植的其他替代方法还有哪些 应用程序?

完全感谢与该主题相关的任何帮助和指示。

1 个答案:

答案 0 :(得分:2)

首先,要支持更高的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的版本),因此您可能必须引导自己的GCC 7或更高版本。有关在Solaris 10 SPARC上构建GCC 4.9.0的示例,请参见https://unix.stackexchange.com/questions/446760/how-to-build-a-gcc-4-9-0-successfully-on-solaris-10-sparc。请注意,按照以下发布内容,https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html

  

因此,我认为是时候在GCC 9中过时支持该版本了   因此在GCC 10中将其删除。

我已经有好几年没有在Solaris 10上构建GCC了,所以我不知道在构建GCC 7或8时会遇到什么。

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

一个警告-无论您如何编译,您几乎都肯定希望同时静态链接libgcclibstdc++,尤其是如果您编译自己的GCC。