目前将现有的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 ++的软件包,因此我使用安装了Solaris 11的机器g ++ 7.3尝试执行在Solaris 11上生成的可执行文件到Solaris 10我收到以下错误:
ld.so.1:hellod:致命:libc.so.1:未找到版本'SUNWpublic'(文件/ Desktop / hellod需要)ld.so.1:hellod:fatal:libc.so.1:open failed:没有这样的文件或目录被杀死
问题
感谢任何与此主题相关的帮助和指示。
首先,为了支持以后的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-something),因此您可能需要引导您自己的GCC 7-some或更高版本。有关在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。请注意,根据此帖子,GCC对Solaris 10的支持可能很快就会结束: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。