【问题标题】:How can I write cross-platform c++ programs on my mac?如何在我的 mac 上编写跨平台的 c++ 程序?
【发布时间】:2012-01-11 22:12:28
【问题描述】:

我的大学教授在他的 c++ 课上对我们提出了要求:我们必须使用 gnu C++ 编译器 (GCC) 编写程序。我知道安装 xcode 后,我得到了一个苹果版的 gcc。但是,据我了解,这并不完全交叉兼容。所以我尝试使用mac端口安装gnu gcc编译器,但一直没有成功。完成后:

port install gcc47

当我去终端运行时:

gcc47 -v

我得到“找不到命令” 当我跑步时:

gcc -v

我明白了:

gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)

显示我仍在使用苹果的版本。我不明白的部分是:

  1. 如何安装 gcc(gnu 版本,而不是苹果版本)
  2. 如何将它与 ide(如 eclipse)一起使用?

【问题讨论】:

  • Apple 的 GCC 版本应该与其他版本的 GCC 兼容。只要您只使用 C++ 标准库中的函数,您将能够编译相同的源代码以在具有任何 C++ 编译器的任何平台上运行。请注意,有时会出现不一致 - 代码可以在一个编译器中运行,而不能在另一个编译器中运行,但 Apple 的 GCC 在这方面并不特别。
  • 听起来您在安装新编译器时做对了,您在运行 port install gcc47 时是否收到任何错误消息?如果没有,请尝试 /opt/local/bin/gcc47。否则我只会使用 XCode 的 gcc,直到发现问题为止。

标签: c++ gcc portability


【解决方案1】:

您使用的 GCC 版本(Apple 或 gnu 本机)应该与您无关。

编写可移植的 C++ 与编译器无关——除了确保您的编译器最好遵守 C++ 标准之外。 幸运的是,GCC 是目前最好的 C++ 编译器之一。

你不打算做跨平台 C++ 本身,因为考虑到各种系统的 C++ 编译器的各种状态(例如 VAX/VMS 上的 CC 没有),编写真正的可移植 C++ 有点痛苦t 支持模板...)。我怀疑您想要做的是确保您在 mac 上编写的代码可以由您的教授编译。只要 GCC 可以在你的 mac 上处理它,应该没问题。

所以对于您的具体问题:

您的第一个问题是不必要的,因为您可以使用苹果提供的 g++ 来编译您的代码。

对于第二个问题,我强烈建议不要在尝试学习时使用 IDE。 IDE 提供了一些非常棒的节省时间的功能,但它们隐藏了一些重要的方面,我认为这些方面值得在您的学习过程的早期进行努力,这将有助于加强您的 C++ 技能。虽然情况肯定已经好转,但一些 IDE 因创建不可移植的 C++(即使用 void main())而臭名昭著。

如果您仍然打算使用 Eclipse 或 XCode,因为无论您使用哪种 GCC 安装,默认设置都应该可以正常工作。

【讨论】:

  • 我不想编译跨平台运行的二进制文件,我明白这一点。我也理解您对 IDE 的看法。但是,我要避免的主要问题是与我的教授有不同的环境。他使用 gnu gcc 进行编译。如果我使用其他任何东西进行编译,那么当他试图在他的平台上编译我的代码时,我可能会遇到一些问题。这就是我要解决的问题。
  • 可以理解。除非你正在做一些非常极端的事情,否则你应该可以使用安装在你的 mac 上的默认 gcc 编译器。
【解决方案2】:

过去我在通过端口安装gcc47 时遇到了麻烦,但gcc46 却如预期的那样运行。您可能还想安装gcc_select

从那里,您可以使用gcc_select,或在 Eclipse 的工具链编辑器中明确指定路径。

其他说明:

  • 如果您不需要 C++11 功能,那么 Apple 的 GCC 4.2.1 应该可以正常工作。也许您可以详细说明为什么不能使用它。基本上,Apple 在某些情况下向工具链添加了一些扩展(标记为 APPLE_ONLY),您可以很好地控制启用/禁用哪些选项。

  • 随 Xcode 一起发布的 Clang 最新版本可以很好地处理 C++(包括对 C++11 的一些支持)。 GCC中有一些高级的东西在使用Clang的时候是我怀念的,但是Clang目前对C++的支持真的是相当不错了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多