【问题标题】:Can we use/simulate Solaris/Aix C/C++ compiler on windows?我们可以在 Windows 上使用/模拟 Solaris/Aix C/C++ 编译器吗?
【发布时间】:2014-07-24 08:38:14
【问题描述】:

有什么方法可以在 Windows 上使用 aix/solaris 编译器,以便我们确定应用程序不会在非 Windows 平台上崩溃?
不同的编译器期望代码的标准不同,这可以从一个操作系统中确定吗?
我知道在像 solaris/AIX 这样的平台上编译意味着代码大部分时间都会在 windows 编译器上编译。
但是这个过程可以从 windows 完成吗,非 windows 平台需要额外的严格性?

【问题讨论】:

  • 您使用的是哪个编译器?这个问题被标记为 linux,所以我想知道你是否使用 gcc
  • @Mansuro:我在 windows 上使用 MS Visual Studio 编译器,在 Linux 上我使用 gcc,即使在这两个编译器成功编译之后,Solaris/AIX 上也会出现问题。无需在 Solaris/AIX 上编译,是否可以在 windows 上检测到这一点。
  • @k53sc 您是在 Solaris/AIX 上使用 Sun CC/XL 还是 g++?以及什么版本。 (当你拥有 Unix 机器时,为什么还要在 Windows 上开发呢?)

标签: c++ linux windows compilation solaris


【解决方案1】:

我不知道。每个编译器都有自己的特性,期望任何一个编译器尝试模仿所有其他编译器是不合理的。您应该做的(尽管据我所知,g++ 是唯一提供该选项的编译器)是指定标准的相当早期版本(例如-std=c++98),并希望最好。会有一些特殊情况会遗漏(例如,长期以来,Sun CC 有不符合标准的库),但如果不使用 C++11 功能,则应该限制问题。

如果可能,最简单的解决方案可能是在任何地方都使用相同的编译器(g++,或者可能是 clang)。

当然,包装任何直接与系统接口的东西。 (我的经验是,在 Unix 下编译和运行的程序在 Windows 下工作,因为它们中似乎总是调用 Posix 函数,这在 Windows 下不存在,或者有在 Windows 下有不同的语义。当我做大部分工作的时候,我的基本编译器是 Sun CC,它带有不符合标准的库,它与 VC++ 以及几乎所有其他编译器都崩溃了。)

【讨论】:

  • 谢谢,我知道当用 POSIX 编译 unix 代码肯定会在 windows 下中断时,平台相关的行为不会中断。什么中断以及导致我在这里发布这个问题的是安全编码实践,VS / gcc 不需要,但 Solaris 编译器应该遵循这些实践。例如:在 if 语句中在 std::maps 上使用 find() 会破坏 Solaris 并传递给其他人。同样有很多这样的问题,如果这些问题被windows / Linux中的某些编译设置以警告的形式检测到,这可能会作为潜在中断的警报。
  • @k53sc 这听起来更像是 Sun CC 中的一个错误,而不是其他任何东西。通常,您不能期望编译器编写者检查某些编译器存在错误的所有情况(尽管至少在过去,一些编译器在 VC++ 中模拟了错误)。
  • @k53sc FWIW:如果您的代码或多或少遵循合理的编码标准,您也许可以编写正则表达式来捕获有问题的情况并使用它们(在 grep或 python) 来找到它们。几年前,当我们遇到 VC++ 不调用析构函数的情况时,我做了类似的事情;我不能保证我找到了所有这些,但我确实在代码库中找到了其他三个会触发错误的情况。这一切都是非常临时的,但它可以节省大量时间,即使它并不完美。
  • 好吧,我可以有一个脚本,它可以检查所有这些错误(有很多像之前评论中给出的例子一样,我认为这是某种严格性Solaris遵循安全实践等),我可以在编译前检查。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 2011-05-25
  • 2014-08-02
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多