端口C ++ 14 Linux应用程序到Solaris 10和11

问题描述 投票:0回答:1

目前将现有的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:没有这样的文件或目录被杀死


问题

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

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

g++ c++14 solaris solaris-10
1个回答
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-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。

一个警告 - 无论你编译,你几乎肯定想要静态链接libgcclibstdc++,特别是如果你编译自己的GCC。

© www.soinside.com 2019 - 2024. All rights reserved.