当前将现有的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:打开失败:没有这样的文件或目录 被杀死
问题
完全感谢与该主题相关的任何帮助和指示。
答案 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。
一个警告-无论您如何编译,您几乎都肯定希望同时静态链接libgcc
和libstdc++
,尤其是如果您编译自己的GCC。