【问题标题】:Clang OS X Lion, cannot find cstdintClang OS X Lion,找不到 cstdint
【发布时间】:2012-04-12 02:43:44
【问题描述】:

我正在尝试编译一个使用 cstdint 的应用程序。由于Apple弃用了gcc,我想尝试用clang编译它,但我得到了错误:

fatal error: 'cstdint' file not found

我知道 gcc 4.6.2 版本可以选择 -std=c++0x 来包含库,但由于 os x 版本是 4.2,所以这里没有太多选择。关于我如何前进的任何建议?我曾尝试安装 4.6.2,但在构建 gcc 之前编译一些所需的库时遇到了各种问题。

【问题讨论】:

  • 我能够毫不费力地在 Mac OS X 10.7.3 上编译 GCC 4.7.0。我相信我使用 Apple GCC 来引导编译,而不是我自己的 4.6.1。如果您需要帮助,请与我联系(请参阅我的个人资料)。 (我在 4.6.2 和 4.6.3 上都没有成功。)

标签: macos gcc clang


【解决方案1】:

大概您拥有此应用程序的源代码,因此您可以修改标头以包含正确的 cstdint 标头,因为 Clang 3.0(Lion 的工具随附)确实具有标头。

快速解决方案

标头位于tr1 目录下,因此您需要执行以下任一操作:

#include <tr1/cstdint>

或者

#include <stdint.h> // which will use the C99 header

更长,无聊的解释

在做了一些额外的阅读之后,因为我记得你可以在没有 tr1 目录的情况下做到这一点:

默认情况下,您将包含来自/usr/include/c++/4.2.1 的 C++ 标头,它们是 GNU GCC 标头。 /usr/include/c++/4.2.1/tr1 包含 TR1 头文件,如 cstdint

另一种方法是使用 Clang++ 前端进行编译并传递 -stdlib=libc++ 标志,它将使用来自 /usr/include/c++/v1 的标头,这是 Clang 的 C++ 标头实现。它有cstdint

例子:

// file called example.cxx
#include <tr1/cstdint>

int main() {
    // whatever...
}

编译:

g++ example.cxx

clang++ example.cxx

它会做你想做的事。

如果您不想使用tr1 版本(大致相同,如果不完全一样):

// file called example.cxx
#include <cstdint>

int main() {
    // stuff
}

这是这样编译的:

clang++ -stdlib=libc++ example.cxx

虽然如果你使用-stdlib=libc++,这意味着你链接到Clang的C++库libc++,而不是GCC的libstdc++

【讨论】:

  • Clang 不使用带有 -std=c++11 标志的 GCC 的 C++11 实现。也许捆绑的 GCC 标准库很旧。但当然 GCC 有&lt;cstdint&gt;
  • @Potatoswatter - Mac OSX 上捆绑的 GCC 库被冻结在 4.1.2,因为该版本与后续版本之间的许可发生了变化,所以是的,它有点旧了。如果您想在 Mac 上获得更好的 C++11 支持,您可以选择安装更新的 GCC 或使用 Clang 实现。
  • 我在 Ubuntu 14.04 上遇到了这个错误,我必须安装 libc++-dev 来获取开发文件。然后-stdlib=libc++ 工作正常。
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 2012-07-25
  • 1970-01-01
  • 2012-02-16
  • 2011-11-17
  • 2012-03-14
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多