18

我正在尝试编译一个使用 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 之前编译一些所需的库时遇到了各种问题。

4

1 回答 1

18

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

快速解决方案

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

#include <tr1/cstdint>

或者

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

更长,无聊的解释

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

默认情况下,您将包含来自 的 C++ 头文件/usr/include/c++/4.2.1,它们是 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++.

于 2012-04-12T02:49:11.427 回答