繁体   English   中英

将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” ; ^


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

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


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


问题

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

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

首先,要支持更高版本的C ++标准,您的Solaris 10安装必须是最新的。 有关原因的示例,请参见无法在Solaris 10上使用GCC 5.5包含cmath 阅读注释-有一些修补程序需要应用到Solaris 10,以使其与C ++ 11以及大概的C ++ 14兼容。

通常,您无法在Solaris 11上进行编译,也无法在Solaris 10上运行生成的二进制文件。

好消息是,您应该能够在Solaris 10上编译并可以在Solaris 11上正常运行,因此您不必维护两个单独的环境,也不必提供两个单独的Solaris产品。 您将要使用二进制文件对此进行测试,但是从理论上讲,它应该可以工作-根据我的经验,它确实可以工作。

我找不到适用于Solaris 10的任何更高版本(大于5的版本),因此您可能必须引导自己的GCC 7或更高版本。 有关在上构建GCC 4.9.0的示例,请参见https://unix.stackexchange.com/questions/446760/how-to-build-a-gcc-4-9-0-successfully-on-solaris-10-sparc Solaris 10 SPARC。 请注意,根据以下发布内容,对Solaris 10的GCC支持可能即将终止: 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM