【问题标题】:Port C++14 Linux application to Solaris 10 and 11将 C++14 Linux 应用程序移植到 Solaris 10 和 11
【发布时间】:2019-03-07 10:57:13
【问题描述】:

目前正在将现有的 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; ^


由于我的应用程序使用了 g++ 4.92 不完全支持的 c++14 结构。需要更高版本的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++ 上安装更高版本的其他方法是什么?
  • 还有哪些我可以交叉编译/移植的替代方案 申请?

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

【问题讨论】:

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


    【解决方案1】:

    首先,为了支持后来的 C++ 标准,您的 Solaris 10 安装需要是最新的。有关原因的示例,请参见 Unable to include cmath using GCC 5.5 on Solaris 10。阅读 cmets - 需要将补丁应用于 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。请注意,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 时。

    【讨论】:

      最近更新 更多